Почему этот (тривиальный) модульный тест терпит неудачу?

StackOverflow https://stackoverflow.com/questions/2291904

Вопрос

Это было почти дословно взято из 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) }

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top