サービスアクティベータメソッドとMockito豆

カタンツァーロ:

私は私のクラスは、この下にあるMockitoとJunit5とテスト私のサービスの活性化因子(MQTTクライアント)のクラスのテストを書くが、私は私のテストでそれを書き直したいと私は試験方法のために... Answer..whenを行う使用@ServiceActivator

@Configuration
public class DataHandler  {
private static final Logger logger = LoggerFactory.getLogger(DataHandler.class);

@Autowired ApplicationContext context;
@Autowired ElasticConfiguration elasticConfiguration;

@Bean
@ServiceActivator(inputChannel = "topicChannel")
public MessageHandler handler() {
    ObuIndexRepository obuIndexRepository = elasticConfiguration.getObuRepository();

    return message -> {
        ObuModel model = JsonUtility.convertToOduModel(String.valueOf(message.getPayload()));
        boolean condition = DataProcessor.processOduModel(model);
        logger.info(String.valueOf(condition));
        Producer.ProducerGateway gw = context.getBean(Producer.ProducerGateway.class);
        if (condition){
            gw.sendToMqtt("Non hai superato il limite di velocità!", Parameters.TOPICS[1]);
        }else{
            gw.sendToMqtt("Hai superato il limite di velocità!", Parameters.TOPICS[1]);
        }
        obuIndexRepository.save(model);
        logger.info("Record correctly inserted into ElasticSearch cluster ...");
    };
}

クラスTEST:

@ExtendWith(MockitoExtension.class)
public class ApplicationTest {

@Mock
private DataHandler dataHandler;
  @Test
  public void testMqtt_1() throws IOException {
    doAnswer((message)->
    {assertTrue("messaggio di Test".equals(message.getArgument(0)));
     return null;
    }).when(dataHandler).handler().handleMessage(any(Message.class));


    dataHandler.handler().handleMessage(new GenericMessage<String>("messaggio di Test"));
    Mockito.verify(dataHandler).handler().handleMessage(new GenericMessage<>("messaggio di Test"));

    }

私はこのクラスを実行すると、私はこのエラーがあります:

java.lang.NullPointerException
at it.communication.ApplicationTest.testMqtt_1(ApplicationTest.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:171)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:167)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:114)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:59)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at java.util.ArrayList.forEach(ArrayList.java:1257)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Suppressed: org.mockito.exceptions.misusing.UnnecessaryStubbingException: 
Unnecessary stubbings detected.
Clean & maintainable test code requires zero unnecessary code.
Following stubbings are unnecessary (click to navigate to relevant line of code):
  1. -> at it.almaviva.communication.ApplicationTest.testMqtt_1(ApplicationTest.java:40)
Please remove unnecessary stubbings or use 'lenient' strictness. More info: javadoc for UnnecessaryStubbingException class.
        at org.mockito.junit.jupiter.MockitoExtension.afterEach(MockitoExtension.java:211)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachCallbacks$11(TestMethodTestDescriptor.java:218)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:230)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:228)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachCallbacks(TestMethodTestDescriptor.java:217)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:120)
        ... 41 more

私は、エラーなしでこれを行うにはどうすればよいですか?ありがとうございます。それでは、お元気で

Lesiak:

あなたはへの呼び出しを模擬しようとしているhandleMessageが、それに電話を嘲笑ことはありませんhandler()

doAnswer((message)->
    {assertTrue("messaggio di Test".equals(message.getArgument(0)));
     return null;
    }).when(dataHandler).handler().handleMessage(any(Message.class));

呼び出すときにそのため、あなたのコードは、NPEで失敗handleMessageヌルオブジェクト上。

正しいコード:

@ExtendWith(MockitoExtension.class)
public class ApplicationTest {

    @Mock
    private DataHandler dataHandler;

    @Mock
    private MessageHandler messageHandler;

    @Test
    public void testMqtt_1() throws IOException {
        doReturn(messageHandler).when(dataHandler).handler();
        doAnswer((answer) ->
        {
            Message<?> message = answer.getArgument(0);
            assertEquals("messaggio di Test", message.getPayload());
            return null;
        }).when(messageHandler).handleMessage(any(Message.class));


        dataHandler.handler().handleMessage(new GenericMessage<>("messaggio di Test"));
        Mockito.verify(messageHandler).handleMessage(new GenericMessage<>("messaggio di Test"));

    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=367319&siteId=1