Grails Unit Tests: Warum hat diese Aussage nicht?
-
23-09-2019 - |
Frage
Ich habe in Java in der Vergangenheit entwickelt, und jetzt versuche ich Grails / Groovy mit diese leicht vom Tutorial .
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
( Hinweis: diese TagLibUnitTestCase ist für Grails 1.2.1 und nicht die Version in der Tutorial )
Aus irgendeinem Grund die oben Test nicht mit:
erwartet: <2010> aber war: <2010>
Ich habe versucht, den Test oben mit der folgenden alternativen Version des Tests zu ersetzen, und der Test bestanden wird gerade fein:
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))
}
Diese beiden Versionen des Tests sind im Grunde die gleiche Sache richtig?
Es sei denn, es ist etwas Neues in Grails 1.2.1 oder Groovy, dass ich nicht zu verstehen. Sie sollten vom gleichen Typ sein, da die Werte sowohl der zurückgegebene Wert sind durch Calendar.getInstance (). Get (Calendar.YEAR)
Lösung
Das Objekt von dateTagLib.thisYear zurückgegeben () muss nicht ein String sein.
Versuchen
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())
In Ihrem Arbeitsbeispiel wird Groovy .thisYear () in einen String für Sie konvertieren.
Drucken Sie dateTagLib.thisYear (). Klasse sicher sein.
cheers
Lee