Por que este teste de unidade (trivial) está falhando?
Pergunta
Isso foi tirado quase literalmente da IBM's Dominando Grails Series.
DateTaglib.groovy:
class DateTagLib {
def thisYear = {
out << Calendar.getInstance().get(Calendar.YEAR)
}
}
DataTaglibtests.groovy:
class DateTagLibTests extends TagLibUnitTestCase {
def dateTagLib
protected void setUp() {
super.setUp()
dateTagLib = new DateTagLib()
}
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("years do NOT match", expected, dateTagLib.thisYear())
}
protected void tearDown() {
super.tearDown()
}
}
grails test-app DateTagLib
resultado:
-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------
Tentei combinar os tipos (int/long/string), mas ainda estou batendo a cabeça contra a parede.
Este teste também falha:
void testThisYear() {
long expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
Solução
Tente o seguinte em vez disso
class DateTagLibTests extends TagLibUnitTestCase {
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
tagLib.thisYear()
assertEquals("years do NOT match", expected, tagLib.out)
}
}
Seu código original tem 2 problemas:
- Você não deve instanciar
DateTagLib
explicitamente. Já está disponível através de uma propriedade da classe de teste nomeadatagLib
thisYear
não retorna o valor do ano, ele escreve paraout
. Dentro de um teste, você pode acessar o conteúdo escrito à saída viatagLib.out
Outras dicas
out << Calendar.getInstance().get(Calendar.YEAR)
coloca o resultado em out
, se você quiser testar este uso def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow