我在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("[email protected]");
        cDto.setBetreff("test value");
        cDto.setAnfrage("test value");
        when(client.postToService("customer/sendEmailContact", cDto, Boolean.class)).thenReturn(true);
        Assert.assertEquals(true, contactService.sendEmailContact(cDto));
    }

}



但是,当期望味精失败时,返回true我想念的false。

最佳答案

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

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


使用ContactServicenew ClientService定义为真实类
注入ServiceClient的模拟内容(通过构造函数或setter,您没有发布代码,所以我不知道它们如何协同工作)
由于ContactService现在是带有ServiceClient注入模拟的真实实例,因此它将转到real方法并调用client.postToService,这将返回您定义的true


如果确实需要模拟,则选项2是对thenCallRealMethod模拟进行ContactService(但是我不知道为什么应该模拟)。就像是:

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

关于java - Mockito返回假,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29316353/

10-10 15:17