gpt4 book ai didi

java - 需要模拟 RabbitTemplate 的测试

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:12 24 4
gpt4 key购买 nike

我有一个充当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("");
}

}

模拟兔子模板的正确方法是什么

最佳答案

对于您的具体情况,无需向模拟添加行为。

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 适配器(通常是用 @Controller 注释的 bean)外部操作 ResponseEntity 并不是一个好习惯。

并且 RabbitTemplate#convertAndSend 应该提供转换机制,因此您不必直接使用Jackson

希望这对您有帮助!

关于java - 需要模拟 RabbitTemplate 的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com