Segue aqui um pequeno tutorial de uso do SUnit. Veja que não é necessariamente a forma correta de usá-lo. Usaremos GNU Smalltalk.
Imagine que queremos implementar um método em
Integer
que retorna se o número é primo ou não. Podemos primeiro criar um test case para verificar seu funcionamento.Para isso, crie um arquivo
test-is-prime.st
e defina a seguinte classe:TestCase subclass: #TestIsPrime
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Unit Test'
!
A classe
TestIsPrime
é filha de TestCase
e, para nosso fim atual, não precisará de atributos.Precisaremos de um método de classe que execute os testes, para que não precisemos criar uma
TestSuite
:!TestIsPrime class methodsFor: 'running'!
run
(self testSelectors) do: [ :test |
self run: test.
].
!
!
Podemos agora criar a categoria
accessing
para os testes:!TestIsPrime methodsFor: 'accessing'!
O primeiro teste pode ser para determinar se números negativos retornam um erro quando se tenta determinar sua primalidade:
testNegative
self should: [ -1 isPrime ] raise: ArithmeticError.
!
Não esqueça de indentar!
[update 2010-04-04]
A indentação aqui tem objetivo exclusivo de manter a clareza do código.
[/update]
O método
#should:raise:
executa um bloco e asserta que uma exceção será levantada, neste caso ArithmeticError
.Podemos fazer o mesmo para zero:
testZero
self should: [ 0 isPrime ] raise: ArithmeticError.
!
Já para o número um, é preciso assertar que ele não é primo, ou seja, retorne falso:
testOne
self shouldnt: [ 1 isPrime ].
!
O método
#shouldnt:
executa um bloco esperando pelo retorno falso.Mas quando chegarmos ao dois, ele é primo:
testTwo
self should: [ 2 isPrime ].
!
O método
#should:
executa um bloco esperando pelo retorno verdadeiro.Você pode fazer isso indefinidamente se quiser:
testSomeOtherValues
self should: [ 3 isPrime ].
self shouldnt: [ 4 isPrime ].
self should: [ 5 isPrime ].
self shouldnt: [ 6 isPrime ].
self should: [ 7 isPrime ].
self shouldnt: [ 8 isPrime ].
self shouldnt: [ 9 isPrime ].
self shouldnt: [ 10 isPrime ].
self should: [ 11 isPrime ].
!
Quando cançar, encerre a lista de métodos da categoria com a linha:
!
Ou, se preferir ser mais explícito:
!!
No final, adicione uma linha para executar os testes:
TestIsPrime run.
Para rodar os testes, copie a imagem contendo seu código para, por exemplo,
test.im
e acrescente o SUnit com o seguinte comando:bash$ gst-load -I test.im SUnit
Agora, com a imagem preparada, você pode executar os testes:
bash$ gst-sunit -I test.im -f test-is-prime.st
Se tudo correr bem, nada acontecerá, caso contrário você poderá receber uma mensagem do tipo:
TestIsPrime>>#testSomeOtherValues ..
FAILURE: Assertion failed
Onde
TestIsPrime>>#testSomeOtherValues
significa que falhou o teste contido no método #testSomeOtherValues
da classe TestIsPrime
.[]’s
Cacilhας, La Batalema