java - Mockito 返回 false

标签 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));
    }

}
  • 但是当失败消息预计 true 返回 false 时,我错过了。

最佳答案

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

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

  1. 使用 new ClientServiceContactService 定义为真实类
  2. 以某种方式注入(inject) ServiceClient 的模拟(通过构造函数或 setter ,您没有发布代码,所以我不知道它们如何协同工作)
  3. 由于 ContactService 现在是注入(inject) ServiceClient 模拟的真实实例,它将转到真实方法并调用 client.postToService ,它将返回您定义的 true

选项 2 是在 ContactService 模拟上执行 thenCallRealMethod 如果您确实需要它进行模拟(但我不明白为什么它应该是模拟)。像这样的东西:

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

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

相关文章:

java - 使搜索引擎能够索引来自 Web 应用程序的数据

java - Junit 测试无法使用 LocalServiceTestHelper 访问文件系统

unit-testing - 如何在SAP UI5中设置单元测试(qUnit)?

java - Maven 根本不会运行

java - int 变量保持为 0,导致 while 循环无法正常运行

java - PowerMockito 私有(private) void 方法问题

java - 如何检查列表中的所有项目是否包含字符串中的任何字符

java - 使用 Robotium 进行 junit 测试时出现 AssertionFailedError

java - 如何在 Android Studio 中将 AppBarLayout 转换为 CoordinatorLayout?

unit-testing - 使用 Microsoft Fakes 和静态通用方法填充