Mockito return 错误

Mockito return false

我在 mokito 上写了一个简单的测试。

public class ContactServiceTest {

    @Mock
    private ServiceClient client;

    @Mock
    private ContactService contactService;

    @Before
    public void init() {
        client = mock(ServiceClient.class);
        contactService = mock(ContactService.class);
    }

    @Test
    public void test_sendEmailContact() {
        ContactDTO cDto = new ContactDTO();
        cDto.setTitle("Mr");
        cDto.setFirstName("Pritam");
        cDto.setLastName("Mohapatra");
        cDto.setTelephone("9439586575");
        cDto.setEmail("pritam.pritam176@gmail.com");
        cDto.setBetreff("test value");
        cDto.setAnfrage("test value");
        when(client.postToService("customer/sendEmailContact", cDto, Boolean.class)).thenReturn(true);
        Assert.assertEquals(true, contactService.sendEmailContact(cDto));
    }

}

您可能在 ContactService 中使用 ServiceClient 实际发送电子邮件联系方式。但是,您将 ContactService 定义为模拟,因此您实际上是在测试模拟而不是真实 class。

选项 1 如果 ContactService 不需要模拟,则首选选项:

  1. ContactService 定义为真实的 class 和 new ClientService
  2. 以某种方式注入 ServiceClient 的模拟(通过构造函数或 setter,您没有发布代码,所以我不知道它们如何协同工作)
  3. 由于 ContactService 现在是带有 ServiceClient 注入模拟的真实实例,它将转到真实方法并调用 client.postToService,这将 return true 作为你定义了。

选项 2 将在 ContactService 上执行 thenCallRealMethod 模拟,如果你真的需要它是模拟的(但我不明白为什么它应该被嘲笑)。类似于:

when(contactService.sendEmailContact(cDto)).thenCallRealMethod();