Тест, требующий макет RabbitTemplate - PullRequest
1 голос
/ 06 марта 2019

У меня есть класс реализации, который действует как класс отправителя rabbitMQ, я пытаюсь написать для этого примеры модульных тестов, но у меня есть сомнения по поводу насмешливого шаблона rabbitmq. Это мой код класса отправителя:

@Service
public class Car implements CarDelegate {

    @Autowired
    private RabbitTemplate rt;

    @Value("${exchange}")
    private String exchange;

    @Value("${queue}")
    private String queue;

    @Override
    public ResponseEntity<String> createCar(String model, String name) {
        Car car = new Car();
        car.setModel(Model);
        car.setName(Name);
        String jsonString;
        jsonString = new ObjectMapper().writeValueAsString(car);
        try {
            rt.convertAndSend(exchange, queue, jsonString);
        } catch (AmqpException e) {
            //to implement
        }
        return new ResponseEntity<>(HttpStatus.ACCEPTED);
    }
}

Мой класс отправителя также является моим методом реализации. Класс теста для него, как показано ниже:

@RunWith(MockitoJUnitRunner.class)
public class CarTest {

    private Car car;
    @Mock
    private RabbitTemplate rt;

    @Test
    public void create_valid() {
        Car car = new Car(rt);
        car.create("sedan", "arison");

        String jsonString = "";
        Mockito.doReturn("")
           .when(rabbitTemplate.convertAndSend(null, null, jsonString))
           .myMethod(Mockito.any(createLeadTest_valid.class));
        Mockito.when(rabbitTemplate.convertAndSend(null, null, jsonString)).thenReturn("");
    }

}

Как правильно издеваться над шаблоном кролика

1 Ответ

0 голосов
/ 21 марта 2019

В вашем конкретном случае нет необходимости добавлять поведение к макету.

public class CarServiceTest {

    @Test
    public void create_valid() {
        RabbitTemplate rt = Mockito.mock(RabbitTemplate.class);
        CarService car = new CarService(rt);
        ResponseEntity<String> response = car.create("sedan", "arison");

        assertThat(response).isNotNull();
        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
    }
}

К вашему сведению, не рекомендуется манипулировать ResponseEntity вне адаптера HTTP (как правило, компонент, помеченный * 1005).*).

И RabbitTemplate#convertAndSend должен обеспечивать механизм преобразования , поэтому вам не нужно напрямую использовать Джексона .

Надеемсяэто поможет вам!

...