我在 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));
}
}
- 但是当失败消息预计 true 返回 false 时,我错过了。
最佳答案
您可能在 ContactService
中使用 ServiceClient
来实际发送电子邮件联系人。但是,您将 ContactService
定义为模拟,因此您实际上是在测试模拟而不是真实的类。
如果 ContactService
不需要模拟,则首选选项 1:
- 使用
new ClientService
将ContactService
定义为真实类 - 以某种方式注入(inject)
ServiceClient
的模拟(通过构造函数或 setter ,您没有发布代码,所以我不知道它们如何协同工作) - 由于
ContactService
现在是注入(inject)ServiceClient
模拟的真实实例,它将转到真实方法并调用client.postToService
,它将返回您定义的true
。
选项 2 是在 ContactService
模拟上执行 thenCallRealMethod
如果您确实需要它进行模拟(但我不明白为什么它应该是模拟)。像这样的东西:
when(contactService.sendEmailContact(cDto)).thenCallRealMethod();
关于java - Mockito 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29316353/