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));
}
}
- 但是当失败消息预期为真时return假我想念的。
您可能在 ContactService
中使用 ServiceClient
实际发送电子邮件联系方式。但是,您将 ContactService
定义为模拟,因此您实际上是在测试模拟而不是真实 class。
选项 1 如果 ContactService
不需要模拟,则首选选项:
- 将
ContactService
定义为真实的 class 和 new ClientService
- 以某种方式注入
ServiceClient
的模拟(通过构造函数或 setter,您没有发布代码,所以我不知道它们如何协同工作)
- 由于
ContactService
现在是带有 ServiceClient
注入模拟的真实实例,它将转到真实方法并调用 client.postToService
,这将 return true
作为你定义了。
选项 2 将在 ContactService
上执行 thenCallRealMethod
模拟,如果你真的需要它是模拟的(但我不明白为什么它应该被嘲笑)。类似于:
when(contactService.sendEmailContact(cDto)).thenCallRealMethod();
我在 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));
}
}
- 但是当失败消息预期为真时return假我想念的。
您可能在 ContactService
中使用 ServiceClient
实际发送电子邮件联系方式。但是,您将 ContactService
定义为模拟,因此您实际上是在测试模拟而不是真实 class。
选项 1 如果 ContactService
不需要模拟,则首选选项:
- 将
ContactService
定义为真实的 class 和new ClientService
- 以某种方式注入
ServiceClient
的模拟(通过构造函数或 setter,您没有发布代码,所以我不知道它们如何协同工作) - 由于
ContactService
现在是带有ServiceClient
注入模拟的真实实例,它将转到真实方法并调用client.postToService
,这将 returntrue
作为你定义了。
选项 2 将在 ContactService
上执行 thenCallRealMethod
模拟,如果你真的需要它是模拟的(但我不明白为什么它应该被嘲笑)。类似于:
when(contactService.sendEmailContact(cDto)).thenCallRealMethod();