简体   繁体   English

Mockito 正在调用真实方法而不是存根

[英]Mockito is calling real method instead of stubs

I have mocked several dependencies and defined their behavior.我已经模拟了几个依赖项并定义了它们的行为。 I do not wish for real methods to be called on my dependencies - the whole point of mocking.我不希望在我的依赖项上调用真正的方法——mocking 的全部要点。

My test:我的测试:

@Test
public void should_Create_MultiDoc_Ticket() throws URISyntaxException{
    DataTransformationService transformationService = Mockito.mock(DataTransformationService.class);
    
    JSONObject samplePolicyData = createSamplePolicyData("Sample Multidoc Template");
    
    InteractiveRequest sampleInteractiveRequest = createSampleInteractiveRequest();
    when(transformationService.transformMultiDocData(createSampleInteractiveData())).thenReturn(createSampleInteractiveData());

    String ticketId = interactiveTicketService.createTicket(samplePolicyData.toString());

    assertThat(ticketId).isEqualTo("sampleTicketId");
    verify(transformationService, times(1)).transformMultiDocData(createSampleInteractiveData());
}

Specifically, the real transformationService.transformMultiDocData() method is being called, when it shouldn't be.具体来说,真正的transformationService.transformMultiDocData()方法正在被调用,而它不应该被调用。

The error when I run the test:我运行测试时的错误:

org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://us-data-transformation-sample/template": us-data-transformation-sample; nested exception is java.net.UnknownHostException: us-data-transformation-sample
    at com.lmig.us.services.DataTransformationService.transformMultiDocData(DataTransformationService.java:114)
    at com.lmig.us.services.InteractiveTicketService.createTicket(InteractiveTicketService.java:56)
    at com.lmig.us.services.InteractiveTicketServiceTest$createTicket.should_Create_MultiDoc_Ticket(InteractiveTicketServiceTest.java:311)
    ... 82 more

Does anyone know what's going on here?有谁知道这里发生了什么?

You should write the test like this:你应该这样写测试:

@ExtendWith(MockitoExtension.class)
public class InteractiveTicketServiceTest {
    @Mock
    DataTransformationService transformationService;

    @InjectMocks
    InteractiveTicketService interactiveTicketService;

    @Test
    public void should_Create_MultiDoc_Ticket() throws URISyntaxException{
        JSONObject samplePolicyData = createSamplePolicyData("Sample Multidoc Template");   
        InteractiveRequest sampleInteractiveRequest = createSampleInteractiveRequest();
        when(transformationService
            .transformMultiDocData(createSampleInteractiveData()))
            .thenReturn(createSampleInteractiveData());
        String ticketId = interactiveTicketService.createTicket(samplePolicyData.toString());
        assertThat(ticketId).isEqualTo("sampleTicketId");
        verify(transformationService, times(1)).transformMultiDocData(createSampleInteractiveData());
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM