пахотный прыжок издевательская пружина

62
7

У меня есть bean:

@Service
public class EQueueBookingService {

@Autowired
public EQueueBookingClient eQueueBookingClient;

И я пытаюсь написать несколько тестов для этого компонента EQueueBookingService, используя Spock. https://code.google.com/p/spock/wiki/SpockBasics

Мой макет

class EQueueBookingServiceTest extends Specification {

@Autowired
EQueueBookingService testedService;

EQueueBookingClient eQueueBookingClient = Mock(EQueueBookingClient);

def setup() {
testedService.eQueueBookingClient = eQueueBookingClient;
}

и метод испытания:

...
setup:
CancelBookingResponse response = new CancelBookingResponse();
...
eQueueBookingClient.cancelBooking(_, _) >> response;
when:

def result = testedService.cancelBooking(request);

then:
result != null && result.bookId == bookId

Почему eQueueBookingClient не издевается?

Когда я его отлаживаю: в тесте - я вижу экземпляр Mock, когда я перехожу к методу - я вижу реальный экземпляр bean.

Большое спасибо!

спросил(а) 2015-05-18T15:50:00+03:00 5 лет, 11 месяцев назад
1
Решение
106

Я нашел решение!

необходимо установить сеттер для этого клиента и использовать его в настройке, например:

private EQueueBookingClient eQueueBookingClient = Mock(EQueueBookingClient);

def setup() {
testedService.setBookingClient(eQueueBookingClient);
}

Если определить клиента в сервисе как общедоступный и использовать = он не работает; Например:

testedService.eQueueBookingClient = eQueueBookingClient;//mocked instance doesn't work

ответил(а) 2015-05-18T17:17:00+03:00 5 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема