Тестирование Моя модель маппера со споком и всеми тестами - PullRequest
0 голосов
/ 14 февраля 2019

Здравствуйте, у меня проблема с тестированием спока.Мне нужно написать модульный тест для моего сопоставителя моделей, но всегда мой тест проходит нормально, даже если я хочу написать неправильно: Это мой сопоставитель моделей:

public class ModelMapper {
    public ConferenceRoomDto fromConferenceRoomToConferenceRoomDto(ConferenceRoom conferenceRoom) {
        return conferenceRoom == null ? null : ConferenceRoomDto.builder()
                .roomName(conferenceRoom.getRoomName())
                .description(conferenceRoom.getDescription())
                .projector(conferenceRoom.getProjector())
                .phoneNumber(conferenceRoom.getPhoneNumber())
                .numberOfSeats(conferenceRoom.getNumberOfSeats())
                .build();

И это мой тест:

given:
    ConferenceRoom conferenceRoom1 = ConferenceRoom.builder()
            .roomName("r")
            .projector(true)
            .description("d")
            .phoneNumber("23")
            .build()
    when:
    modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
    then:
    ConferenceRoomDto conferenceRoomDto1 = ConferenceRoomDto.builder()
            .build()
}

Этот тэт должен потерпеть неудачу, потому что я передаю значения в конференц-зал и ожидаю, что dto без значений, но все тесты пройдены нормально.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы ничего не тестируете в своем примере, потому что ConferenceRoomDto conferenceRoomDto1 = ConferenceRoomDto.builder().build() является только заданием, а не тестом.Это причина, по которой тест всегда проходит.

Измените ваш тест, например:

def 'DTO is mapped from bean'() {
    given:
    ConferenceRoom conferenceRoom1 = ConferenceRoom.builder()
            .roomName("r")
            .projector(true)
            .description("d")
            .phoneNumber("23")
            .build()
    when:
    ConferenceRoomDto dto = modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)

    then:
    dto.roomName == 'r'
    dto.projector
    dto.description == 'd'
    dto.phoneNumber == '23'
}

В разделе then теперь 4 подтверждения, которые выполняют тесты.Например, значение roomName равно 'r'.

0 голосов
/ 14 февраля 2019

ОК - поэтому здесь есть две проблемы с вашим тестом.

  1. = означает назначение.Чтобы проверить на равенство, вам нужно использовать == в последней строке вашего теста.Это не характерная для Спока вещь - это общее правило, которое применяется ко всем языкам программирования, с которыми я сталкивался:

    • a = b означает присвоение значения b переменной a.
    • a == b означает 'true', если a и b в некотором роде 'равны', в противном случае 'false'.

    Спок ожидает код в then блок до конца в выражении, которое можно оценить как true (с указанием пройденного теста) или false.

  2. Ваша последняя строка, даже если она использовала правую *Оператор 1028 * фактически не сравнивает ожидаемое значение со значением, возвращенным предыдущей строкой.Я полагаю, что вы ищете:

    when:
    def result = modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
    then:
    result == ConferenceRoomDto.builder().build()
    

    В Споке, я считаю, что более идиоматический способ выразить это просто:

    expect:
    modelMapper.fromConferenceRoomToConferenceRoomDto(conferenceRoom1)
        == ConferenceRoomDto.builder().build()
    

Напомним, что ни одна из этих двух проблем не связана с использованием вами Спока.Такая же проблема может возникнуть у любого тестового фреймворка или языка программирования или даже вне тестирования.

...