Java 如何使用mockito测试Kafka制作者的send方法,并使用回调?

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

我正在尝试测试一种方法,为此我使用mockito。然而,我的mock并没有进入if的状态,而是直接进入flush的行

我想测试以下情况:

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类,您可能应该使用它来代替它。您能给我一个例子吗?