Модульные тесты Grails:Почему это утверждение терпит неудачу?
-
23-09-2019 - |
Вопрос
Раньше я занимался разработкой на Java, а теперь пытаюсь изучить Grails/Groovy, используя это немного устаревшее руководство.
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
(Примечание: этот TagLibUnitTestCase предназначен для Grails 1.2.1, а не для версии, используемой в руководство)
По какой-то причине приведенный выше тест не удался:
ожидалось:<2010>, но было:<2010>
Я попытался заменить приведенный выше тест следующей альтернативной версией теста, и тест прошел нормально:
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))
}
Эти две версии теста по сути одно и то же, верно?
Если только в Grails 1.2.1 или Groovy нет чего-то нового, чего я не понимаю.Они должны быть одного типа, поскольку оба значения являются значениями, возвращаемыми Calendar.getInstance().get(Calendar.YEAR)
Решение
Объект, возвращаемый функцией dateTagLib.thisYear(), не должен быть строкой.
Пытаться
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())
В вашем рабочем примере Groovy преобразует .thisYear() в строку.
Для уверенности распечатайте dateTagLib.thisYear().class.
ваше здоровье
Ли