Grails Unit test: Perché questa dichiarazione fallire?
-
23-09-2019 - |
Domanda
ho sviluppato in Java, in passato, e ora sto cercando di imparare Grails / Groovy utilizzando questo leggermente datato esercitazione .
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())
}
}
DateTagLibTests.groovy
( Nota: questo TagLibUnitTestCase è per Grails 1.2.1 e non la versione utilizzati nel esercitazione )
Per qualche ragione la prova di cui sopra non riesce con:
atteso: <2010>, ma era: <2010>
Ho provato a sostituire la prova di cui sopra con la seguente versione alternativa del test e il test viene superato bene:
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))
}
Queste due versioni del test sono fondamentalmente la stessa cosa giusta?
A meno che non ci sia qualcosa di nuovo in Grails 1.2.1 o Groovy che non sto capendo. Essi dovrebbero essere dello stesso tipo perché i valori sono sia il valore restituito da Calendar.getInstance (). Get (Calendar.YEAR)
Soluzione
L'oggetto restituito da dateTagLib.thisYear () non deve essere una stringa.
Prova
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())
Nel tuo esempio di lavoro, Groovy è la conversione .thisYear () per una stringa per voi.
Stampare dateTagLib.thisYear (). Classe per essere sicuri.
applausi
Lee