AssertThat использование при сравнении дат

Хочу написать тест против поиска с датой. Я думаю о тестовом коде что-то вроде

assertThat(repository.findByBookingDateAfter(LocalDate.of(2016, 1, 1))).extracting("bookingDate").are(...));

где структура классов выглядит примерно так:

public class Booking{
  ...
  LocalDate bookingDate;
  ...
}

Поскольку запрос касается любых бронирований после заданной даты, мой тест действительно должен проверять это поле позже указанной даты. После некоторого поиска в Интернете я не нашел полезной информации. Мне интересно, на правильном пути я или нет.

Какие-либо предложения?

Обновление:

Позже я изменяю настройку зависимостей в файле build.gradle следующим образом:

testCompile('org.springframework.boot:spring-boot-starter-test'){
    exclude group: 'org.assertj'
}
testCompile group: 'org.assertj', name: 'assertj-core', version: '3.6.2'

чтобы иметь последнюю версию assertj.

Обновление 2:

Ниже приведен снимок экрана всех методов, начинающихся с "is". "IsAfter" нет в списке.

введите описание изображения здесь


person vic    schedule 17.02.2017    source источник
comment
Не могли бы вы расширить свой пример дополнительным кодом и описанием того, что конкретно вы хотите протестировать, что вы ожидаете и что уже пробовали? В зависимости от того, какой date api вы используете (в вашем примере я вижу LocalDate), вы можете посмотреть документацию для Утверждение Joda-Time или примеры кода для Java 8 Date and Time API.   -  person Thomas Traude    schedule 17.02.2017
comment
Спасибо. Я добавляю подробности в свой вопрос.   -  person vic    schedule 18.02.2017


Ответы (1)


Я бы использовал утверждения allMatch или allSatisfy, чтобы проверить, что каждая извлеченная дата находится после даты, использованной в запросе.

// set the extracted type to chain LocalDate assertion 
assertThat(result).extracting("bookingDate", LocalDate.class)
                  .allMatch(localDate -> localDate.isAfter(queryDate)));

or

// use a lambda to extract the LocalDate to chain LocalDate assertion
assertThat(result).extracting(Booking::getBookingDate)
                  .allSatisfy(localDate -> assertThat(localDate).isAfter(queryDate));

вы получите более точное сообщение об ошибке со вторым утверждением, оно покажет ошибочную дату.

person Joel Costigliola    schedule 18.02.2017
comment
Являются ли allMatch и allSatisfy частью assertj? Я не могу найти их ни в каких зависимостях своего проекта. Также код localDate - ›assertThat (localDate) также не может пройти компилятор. - person vic; 19.02.2017
comment
они находятся в версии 3.6.2, см. joel-costigliola.github.io/assertj/core-8/api/org/assertj/core/ - person Joel Costigliola; 19.02.2017
comment
После замены на версию я вижу allMatch и allSatisfy, но не isAfter. Я просматриваю все доступные методы, но не могу найти подходящий. - person vic; 19.02.2017
comment
Я вижу, что это в вашем примере кода github.com/joel-costigliola/assertj-examples/blob/master/, но я не знаю, почему я его не вижу. - person vic; 19.02.2017
comment
вы смотрите на Date примеры утверждений вместо LocalDate, которые показаны в github.com/joel-costigliola/assertj-examples/blob/master/. Можете ли вы дважды проверить версию AssertJ, которую вы используете? - person Joel Costigliola; 20.02.2017
comment
Я добавляю в вопрос обновленную настройку зависимости моего проекта. Я обнаружил, что использовал Java6Assertions.assertThat вместо Assertions.assertThat. После внесения исправления проблема все еще существует: не удается найти isAfter. Я также пытаюсь сделать что-то так же, как allSatisfy (title - ›assertThat (title) .contains (the string)). Содержимое тоже не может быть найдено. - person vic; 20.02.2017
comment
Следующий пример доказывает, что allSatisfy прекрасно работает с утверждением LocalDate isAfter в assertj core 3.6.1: github.com/joel-costigliola/assertj-examples/blob/master/ Проверьте еще раз вашу версию с использованием. Покажите нам, как получить зависимость assertj-core. - person Joel Costigliola; 21.02.2017
comment
вам необходимо указать тип того, что вы извлекаете, в противном случае AssertJ, например: github.com/joel-costigliola/assertj-examples/blob/master/ Использование Java8 Я бы рекомендовал использовать лямбда для выразить операцию извлечения, так как она сообщит AssertJ извлеченный тип, например: github.com/joel-costigliola/assertj-examples/blob/master/. надеюсь, на этот раз это сработает! - person Joel Costigliola; 22.02.2017
comment
Да, изменение работает в обоих случаях. Спасибо большое за вашу помощь. - person vic; 22.02.2017