我在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是首选选项:
使用ContactService
将new 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/