Модульные тесты Grails: почему это утверждение не выполняется? - PullRequest
1 голос
/ 30 марта 2010

Я разрабатывал на 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)

1 Ответ

2 голосов
/ 30 марта 2010

Объект, возвращаемый из dateTagLib.thisYear (), не должен быть строкой.

Попробуйте

  assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())

В вашем рабочем примере Groovy преобразует .thisYear () в строку для вас.

Для уверенности распечатайте класс dateTagLib.thisYear ().

ура

Lee

...