Java 如何使用mockito测试Kafka制作者的send方法,并使用回调?
我正在尝试测试一种方法,为此我使用mockito。然而,我的mock并没有进入if的状态,而是直接进入flush的行 我想测试以下情况:Java 如何使用mockito测试Kafka制作者的send方法,并使用回调?,java,apache-kafka,mockito,Java,Apache Kafka,Mockito,我正在尝试测试一种方法,为此我使用mockito。然而,我的mock并没有进入if的状态,而是直接进入flush的行 我想测试以下情况: public class SomeClass{ @Autowired private Producer<String, SpecificRecord> producer; private static final Logger LOGGER = Logger.Factory.getLogger(SomeClass.c
public class SomeClass{
@Autowired
private Producer<String, SpecificRecord> producer;
private static final Logger LOGGER = Logger.Factory.getLogger(SomeClass.class);
public void sendMessage(String topic, SpecificRecord message, Map<String,String> headers){
ProducerRecord<String, SpecificRecord> avroMessage = new ProducerRecord<>(topic, null, null, "key",message, headers);
producer.send(avroMessage, (metadata, exception) -> {
if(exception == null ) {
LOGGER.info("OK");
}else{
LOGGER.info("NOK");
}
});
producer.flush();
}
公共类SomeClass{
@自动连线
私营生产者;
私有静态最终记录器Logger=Logger.Factory.getLogger(SomeClass.class);
public void sendMessage(字符串主题、SpecificRecord消息、映射头){
ProducerRecord avroMessage=新的ProducerRecord(主题、空、空、“键”、消息、标题);
producer.send(avroMessage,(元数据,异常)->{
if(异常==null){
LOGGER.info(“OK”);
}否则{
LOGGER.info(“NOK”);
}
});
producer.flush();
}
我正在做的是:
@RunWith(MockitoJUnitRunner.class)
public class SomeClassTest{
@InjectMocks
private SomeClass someclass;
@Mock
private Producer<String,SpecificRecord> producer;
@Mock
private SpecificRecord message;
@Mock
private Logger logger;
@Test
public void sendMessageTest(){
when(producer.send(any(ProducerRecord.class),any(Callback.class))).thenReturn(null);
doNothing().when(producer).flush();
someclass.sendMessage("topic", message, new HashMap<String,String>());
verify(logger).info("OK");
}
}
@RunWith(MockitoJUnitRunner.class)
公共类测试{
@注射模拟
私人某类某类;
@嘲弄
私营生产者;
@嘲弄
专用记录报文;
@嘲弄
私人记录器;
@试验
public void sendMessageTest(){
当(producer.send(any(ProducerRecord.class)、any(Callback.class))。然后返回(null);
doNothing().when(producer.flush();
sendMessage(“主题”,message,newhashmap());
验证(记录器)。信息(“正常”);
}
}
如何才能正确模拟这种情况?Kafka包含一个MockProducer类,您可能应该使用它来代替它。您能给我一个例子吗?