Warum ist dieser (trivial) Unit-Test versagt?
Frage
Dies wurde fast wörtlich aus IBMs genommen Mastering Grails Serie.
DateTagLib.groovy:
class DateTagLib {
def thisYear = {
out << Calendar.getInstance().get(Calendar.YEAR)
}
}
DateTagLibTests.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
Ausgabe:
-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------
Ich habe versucht, die Typen passend (int / long / String), aber ich bin hämmern noch meinen Kopf gegen die Wand.
Dieser Test auch nicht:
void testThisYear() {
long expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
Lösung
Versuchen Sie, die folgenden statt
class DateTagLibTests extends TagLibUnitTestCase {
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
tagLib.thisYear()
assertEquals("years do NOT match", expected, tagLib.out)
}
}
Ihr Original-Code hat zwei Probleme:
- Sie sollten nicht instantiate
DateTagLib
explizit. Es ist bereits durch eine Eigenschaft der Testklasse mit dem NamentagLib
-
thisYear
kehrt nicht den Wert des Jahres, um es zuout
schreibt. Innerhalb eines Tests können Sie den Inhalt mit dem Ausgang übertagLib.out
geschrieben Zugriff
Andere Tipps
out << Calendar.getInstance().get(Calendar.YEAR)
legt das Ergebnis in out
, wenn Sie diese Anwendung testen wollen def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow