Утверждение списка предметов в Споке

Использование Spock 0.7 с Grails 2.04. Пытаюсь настроить тестовую среду. Мне нужна помощь в тестировании списка объектов.

У меня есть список объектов местоположения. Я хочу проверить дату на каждом из этих объектов. Я повторяю, но не уверен, как сделать так, чтобы тест не прошел, если даты не равны. Есть ли хороший способ проверить объекты в списке? Я перечислил ниже свой тогдашний блок кода.

then:
        weatherList != null
        weatherList.empty != null
        weatherList.size() == 3
        weatherList.each {
            Calendar today = Calendar.getInstance();
            today.clearTime()
            if(it.forecastDate != today) {
                return false
            }
        }

person Jeremy    schedule 30.10.2012    source источник


Ответы (1)


Решение может выглядеть так (комментарии встроены):

// avoid testing with real dates if possible
def today = Calendar.getInstance().clearTime() 

when:
...

then:
weatherList != null
weatherList.size() == 3
// does this list really contain Calendar objects?
weatherList.every { it.forecastDate == today }
// OR, for a potentially better error message
weatherList.each { assert it.forecastDate == today }
person Peter Niederwieser    schedule 30.10.2012
comment
Спасибо, Петр, это было именно то, что я искал. Не могли бы вы пояснить, что вы имели в виду, говоря, что нужно избегать тестирования с реальными датами? Просто создайте тестовую среду и постарайтесь внедрить передовые методы. - person Jeremy; 30.10.2012
comment
В нынешнем виде тест может провалиться, если его запустить около полуночи. Может быть способ сделать его более надежным, например, изменив что-то, чтобы вы могли тестировать в течение фиксированного дня. Или, может быть, достаточно проверить, что все элементы списка имеют один и тот же день. - person Peter Niederwieser; 30.10.2012