Testes de unidade de Grails: Por que essa declaração falha?
-
23-09-2019 - |
Pergunta
Eu desenvolvi em Java no passado, e agora estou tentando aprender graals/groovy usando Este tutorial ligeiramente datado.
import grails.test.*
class DateTagLibTests extends TagLibUnitTestCase {
def dateTagLib
protected void setUp() {
super.setUp()
dateTagLib = new DateTagLib()
}
protected void tearDown() {
super.tearDown()
}
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
// NOTE: This statement fails
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear())
}
}
DataTaglibtests.groovy
(Observação: Este taglibunittestcase é para graals 1.2.1 e não a versão usada no tutorial)
Por alguma razão, o teste acima falha com:
Esperado: <2010> mas foi: <2010>
Tentei substituir o teste acima pela seguinte versão alternativa do teste, e o teste passa bem:
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
String actual = dateTagLib.thisYear()
// NOTE: The following two assertions work:
assertEquals("the years don\'t match", expected, actual)
assertTrue("the years don\'t match", expected.equals(actual))
}
Essas duas versões do teste são basicamente a mesma coisa, certo?
A menos que haja algo novo no Grails 1.2.1 ou groovy que eu não estou entendendo. Eles devem ser do mesmo tipo porque os valores são o valor retornado por Calendar.getInstance (). Get (calendário.year)
Solução
O objeto retornado de DateTaglib.Thisyear () não deve ser uma string.
Tentar
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())
No seu exemplo de trabalho, o Groovy está convertendo .ThisYear () em uma string para você.
Imprima DataTaglib.Thisyear (). Classe com certeza.
Felicidades
Lee