我有一个实现类,它充当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("");
}
}
模拟兔子模板的正确方法是什么
答案 0 :(得分:0)
对于您的特定情况,无需在模拟中添加行为。
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);
}
}
仅供参考,在HTTP适配器(通常是带有ResponseEntity
注释的bean)之外操作@Controller
并不是一个好习惯。
RabbitTemplate#convertAndSend
应该提供一种转换机制,因此您不必直接使用 Jackson 。
希望这对您有帮助!