22 Aug 2011

Scala 2.9, sbt 1.0 e TDD com scalatest Parte 1

Este é um pequeno post sobre Scala 2.9 e sbt 1.0 com scalatest, o sistema operacional usado para criar esse post foi o Mac OS X, mas pode ser facilmente migrado para Linux.

Para instalar o Scala em seu computador utilize o Typesafe Stack. Simplifica bastante a configuração do ambiente.

Existem várias formas de trabalhar com Scala, particularmente eu gosto do sbt, por causa da sua semelhança com o maven.

Para instalar o sbt, crie uma pasta bin no seu diretório $HOME.

mkdir  ~/bin

Baixe o arquivo sbt-launch.jar e coloque no diretório bin que criamos acima. Conforme recomendado evite colocar o arquivo em um diretório mapeado no classpath.

No diretório bin, crie um arquivo chamado sbt.

touch sbt

Adicione as linhas ao arquivo sbt

java  -Dfile.encoding=UTF8 -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -jar `dirname $0`/sbt-launch.jar "$@"

Salve o arquivo e modifique a permissão do arquivo.

chmod  +x  ~/bin/sbt

Ótimo, com o arquivo criado, agora vamos adicionar o diretório bin no PATH do sistema.

Edite o arquivo .profile que está no raiz do diretório $HOME do seu usuário.

vim ~/.profile

Adicione a seguinte linha ao arquivo e salve.

export PATH=:$HOME/bin: $PATH

Pronto, agora vamos criar o nosso primeiro projeto.

Crie um projeto chamado scala-fraction, utilizando os comandos abaixo.

mkdir  ~/scala-fraction
cd ~/scala-fraction
sbt

Ok, se a sua configuração estiver correta o sbt irá definir o diretório scala-fraction como sendo o raiz do seu projeto.

O resultado vai ser algo parecido com isso:

[info] Set current project to default-210113 (in build file:/Users/flavio/scala-fraction/)
>

Sem sair do sbt digite os seguintes comandos:

set name := “Scala Fraction”
set version := “1.0”
set scalaVersion := “2.9.0”
libraryDependencies += "org.scalatest" %% "scalatest" % "1.6.1"
session save
exit

Quando você executa os comandos acima, o sbt cria e salva o arquivo build.sbt, no raiz do diretório scala-fraction, nesse arquivo definimos as informações básicas do projeto(name, version, scalaVersion) e sua dependência(libraryDependencies).

O libraryDependencies utiliza a mesma nomeclatura de depêndencia do maven, sendo assim temos:

libraryDependencies += groupID %% artifactID % revision

No diretório do scala-fraction, crie o diretório src utilizando os seguintes comandos.

mkdir –p src/test/scala
mkdir –p src/main/scala

O sbt utiliza uma estrutura semelhante ao maven, então com os comandos acima criamos um diretório para test e um diretório para os arquivos dos projeto.

Crie um arquivo FractionSpec.scala no diretório src/test/scala.

touch  src/test/scala/FractionSpec.scala

Execute novamente o sbt e aguarde o sbt carregar a dependência do projeto. Quando o sbt estiver carregado digite ~test, com o este parâmetro o sbt vai monitorar as alterações dos arquivos.

Vamos definir o nosso primeiro test e verificar o funcionamento do sbt. Neste exemplo vamos trabalhar com frações e construir um simples programa para somar e reduzir frações.

  1. Uma fração deve ter um numerador e um denominador;
  2. Uma fração pode ser própria, impropria e unitária;
  3. Uma fração pode ser reduzida;
  4. Uma fração pode ser somada a outra fração.

Para simplificar o exemplo a classe FractionSpec vai utilizar FlatSpec e ShoudMatches, veja como vai fica a classe utilizando as especificações acima.

Note que no terminal o projeto foi compilado e foi executado o test acima.

[info] FractionSpec:
[info] A fraction
[info] - should a numerator and denominator (pending)
[info] - should proper (pending)
[info] - should improper (pending)
[info] - should unit (pending)
[info] Passed: : Total 4, Failed 0, Errors 0, Passed 0, Skipped 4
[success] Total time: 3 s, completed Aug 22, 2011 1:28:33 PM
6. Waiting for source changes... (press enter to interrupt)

Por enquanto é só….

Referências