Почему этот (тривиальный) модульный тест терпит неудачу?
Вопрос
Это было почти дословно взято из IBM. Освоение Грааля ряд.
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
выход:
-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------
Я пытался сопоставить типы (int/long/String), но все равно бился головой о стену.
Этот тест также не пройден:
void testThisYear() {
long expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
Решение
Вместо этого попробуйте следующее
class DateTagLibTests extends TagLibUnitTestCase {
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
tagLib.thisYear()
assertEquals("years do NOT match", expected, tagLib.out)
}
}
В исходном коде есть две проблемы:
- Вы не должны создавать экземпляры
DateTagLib
явно.Он уже доступен через свойство тестового класса с именемtagLib
thisYear
не возвращает значение года, оно записывает его вout
.В рамках теста вы можете получить доступ к содержимому, записанному на выходе, черезtagLib.out
Другие советы
out << Calendar.getInstance().get(Calendar.YEAR)
помещает результат в out
, если вы хотите протестировать это, используйте def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }
Не связан с StackOverflow