- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在测试以下功能。
public boolean produceNumberOfPeople(NumberOfPeopleInPlaceDTO numberOfPeopleInPlaceDTO) {
final ProducerRecord<Integer, Integer> record = new ProducerRecord<>(
KafkaConfig.NUMBER_OF_PEOPLE_BY_PLACE_TOPIC,
numberOfPeopleInPlaceDTO.getId(),
numberOfPeopleInPlaceDTO.getNumberOfPeople());
try {
kafkaTemplate.send(record).get(2, TimeUnit.SECONDS);
return true;
}
catch (ExecutionException | TimeoutException | InterruptedException e) {
return false;
}
}
这是测试代码。
@Test
public void produceNumberOfPeopleTest() throws InterruptedException, ExecutionException, TimeoutException {
NumberOfPeopleInPlaceDTO numberOfPeopleInPlaceDTO = NumberOfPeopleInPlaceDTO.builder()
.id(1)
.numberOfPeople(10)
.build();
Mockito.when(kafkaTemplate.send(Mockito.any(ProducerRecord.class)))
.thenReturn(listenableFuture);
Mockito.when(listenableFuture.get(2,TimeUnit.SECONDS))
.thenThrow(TimeoutException.class);
Assert.assertFalse(placeService.produceNumberOfPeople(numberOfPeopleInPlaceDTO));
}
我定义了以下变量。
@Autowired
private PlaceService placeService;
@MockBean
private PlaceRepository placeRepository;
@MockBean
private KafkaTemplate<Integer, Integer> kafkaTemplate;
@MockBean
private ListenableFuture listenableFuture;
问题是 kafkaTemplate.send(record).get(2,TimeUnit.SECONDS)
没有抛出异常。所以测试一直失败。
如有任何遗漏,请提出建议。
最佳答案
我会建议创建失败的 ListenableFuture
对象而不是 Mock
SettableListenableFuture<SendResult<String, Object>> future = new SettableListenableFuture<>();
future.setException(new RuntimeException())
然后在 mock 中返回这个
Mockito.when(kafkaTemplate.send(Mockito.any(ProducerRecord.class))).thenReturn(listenableFuture);
所以当get方法被调用它抛出 ExecutionException
This method returns the value if it has been set via set(Object), throws an ExecutionException if an exception has been set via setException(Throwable), or throws a CancellationException if the future has been cancelled.
关于java - Mockito 使用 thenThrow 为 KafkaTemplate.send 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67267850/
我是第一次使用 Mockito,我想知道使用 when(dao.create(order)).thenThrow(new SQLException()); 和 之间有什么区别>when(dao.cre
我在尝试测试代表 Rest Client 的类时遇到问题。我在 Spring Boot 中使用 RestTemplate。 这是抽象的 RestClient 类: public abstrac
doThrow() 和 thenThrow() 有什么区别? 比方说,我们想要模拟身份验证服务来验证用户的登录凭据。如果我们要模拟异常,下面两行有什么区别? doThrow(new BadCreden
我可以将模拟对象作为参数传递给 thenThrow() 方法吗?我有这样的东西: public class MyException extends Exception { public MyE
when(mockObj.method(param1, param2)).thenReturn(1); when(mockObj.method(param1, param2)).thenReturn(
我有以下代码: @Mock private B b; @InjectMocks private A a; @Test(expected = IOException.class) public void
我试图模拟 restOperation 以抛出异常,但我得到 MockitoException 而不是采取适当的异常。这对我来说很奇怪,因为当我尝试测试快乐路径时,几乎相同的模拟调用工作正常。这有什么
我有一个方法process,它返回void,也可能抛出异常。我想验证在调用 process 时其他方法 run 的行为方式以及在发生异常时如何处理异常。 我尝试使用doThrow(),但它告诉我“检查
我遇到了 mockito 的问题。我正在开发一个网络应用程序。在我的测试中,用户管理被模拟了。在某些情况下,我必须更改 getLoggedInUser() 方法返回的用户。 问题是,我的 getLog
我正在测试以下功能。 public boolean produceNumberOfPeople(NumberOfPeopleInPlaceDTO numberOfPeopleInPlaceDTO) {
我是一名优秀的程序员,十分优秀!