模拟一个返回未来抛出异常的方法

ann*_*iid 4 java mockito

我正在使用 Java 和 Mockito 来模拟一些单元测试方法。我想在下面的代码中模拟生产者,以便我可以测试抛出异常时发送的日志消息。我尝试模拟未来,但是我得到的错误是不能模拟 future.get() 方法,并且RecordMetadata该类是最终的并且不能被模拟。任何帮助将不胜感激。

下面例子中的生产者是一个KafkaProducer.

public void send(Log log){
  Future<RecordMetadata> future = producer.send(new ProducerRecord<(this.topic, record));
  try {
     RecordMetadata recordMetadata = send.get();
  } catch (InterruptedException e) {
     LOG.error("Sending the message to kafka was interrupted. "+e);
  }
}
Run Code Online (Sandbox Code Playgroud)

nbr*_*oks 5

Kafka 提供了一个MockProducer类,您可以将其注入到您的类中进行测试。您可以将producer类中的设置为MockProducer带有 JUnit@Before注释的设置方法中的实例。从参考文档中MockProducer

可用于测试使用 Kafka 的代码的生产者接口的模拟。

默认情况下,此模拟将成功同步完成每个发送调用。但是,它可以配置为允许用户控制调用的完成并提供一个可选的错误供生产者抛出。

您可以使用该#errorNext方法提供要在测试场景中抛出的异常。

  • @GaryO'Donoghue InterruptedException 扩展异常而不是运行时异常 (2认同)