Mockito回归虚假

时间:2015-03-28 11:01:31

标签: java unit-testing junit

我在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));
    }

}
  • 但是当遇到失败时,msg会返回false,我会错过。

1 个答案:

答案 0 :(得分:1)

您可能正在ServiceClient使用ContactService来实际发送电子邮件联系人。但是,您将ContactService定义为模拟,因此您实际上是在测试mock而不是真正的类。

如果ContactService不需要模拟,

选项1 首选选项:

  1. 使用ContactService
  2. new ClientService定义为真实班级
  3. 以某种方式注入ServiceClient的模拟(通过构造函数或setter,你没有发布代码所以我不知道它们是如何一起工作的)
  4. 由于ContactService现在是注入模拟ServiceClient的真实实例,因此它将转到实际方法并调用client.postToService,它将按您的定义返回true
  5. 选项2 将在thenCallRealMethod模拟ContactService上进行when(contactService.sendEmailContact(cDto)).thenCallRealMethod(); 如果您确实需要它进行模拟(但我不明白为什么它应该模拟)。类似的东西:

    {{1}}