This was taken nearly verbatim from IBM's Mastering Grails series.
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)
assertEqua开发者_如何学Pythonls("years do NOT match", expected, dateTagLib.thisYear())
}
protected void tearDown() {
super.tearDown()
}
}
grails test-app DateTagLib
output:
-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------
I tried matching the types (int/long/String), but I'm still banging my head against the wall.
This test also fails:
void testThisYear() {
long expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
Try the following instead
class DateTagLibTests extends TagLibUnitTestCase {
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
tagLib.thisYear()
assertEquals("years do NOT match", expected, tagLib.out)
}
}
Your original code has 2 problems:
- You should not instantiate
DateTagLib
explicitly. It is already available through a property of the test class namedtagLib
thisYear
does not return the year value, it writes it toout
. Within a test you can access the content written to the output viatagLib.out
out << Calendar.getInstance().get(Calendar.YEAR)
puts the result into out
, if you want to test this use def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }
精彩评论