java - 如何在 java junit 测试中使用mockito模拟对函数的调用

标签 java unit-testing junit mockito

我有一个 jUnit 测试来测试我的一个功能。在该函数中,我调用了另一个类的方法,我想使用mockito 来模拟该方法。然而,我似乎无法真正 mock 这一点。我的 jUnit 测试如下所示:

@Test
public void testingSomething() throws Exception {

    mock(AuthHelper.class);
    when(new AuthHelper().authenticateUser(null)).thenReturn(true);

    Boolean response = new MainClassImTesting().test();
    assertTrue(response);
}

编辑:在我调用的MainClassImTesting().test()函数中,它调用authenticateUser()并向其传递一个hashMap。

最佳答案

Mockito 将允许您创建一个模拟对象并使其方法返回预期结果。因此,在这种情况下,如果您希望模拟的 AuthHelper 实例的authenticateUser 方法返回 true,无论 HashMap 参数的值如何,您的代码将如下所示:

AuthHelper mockAuthHelper = mock(AuthHelper.class);
when(mockAuthHelper.authenticateUser(any(HashMap.class))).thenReturn(true);

但是,除非您的模拟对象可以访问或引用它,否则您的模拟对象对您的 MainClassImTesting 毫无用处。您可以通过将 AuthHelper 添加到 MainClassImTesting 的构造函数中来实现此目的,以便该类(包括您的测试方法)可以访问它。

MainClassImTesting unitUnderTest = new MainClassImTesting(mockAuthHelper);
Boolean response = unitUnderTest.test();
assertTrue(response);

或者,如果您的测试方法是唯一需要 AuthHelper 的方法,您可以简单地将 AuthHelper 作为方法参数。

MainClassImTesting unitUnderTest = new MainClassImTesting();
Boolean response = unitUnderTest.test(mockAuthHelper);
assertTrue(response);

关于java - 如何在 java junit 测试中使用mockito模拟对函数的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844832/

相关文章:

java - 使用 JAXB 格式化 XML

java - 为什么学生没有被编辑

c++ - Visual Studio 2015 未运行 C++ 单元测试

unit-testing - 用 Jest 测试自执行函数

java - 如何从 JUNIT 测试用例中使用 @RequestBody 调用 Spring Controller 的方法

java - 如何避免 BeanCreationException : Could not autowire field error

java - 编译时错误: illegal Character:\8279

java - jgrapht 示例中的 DefaultEdge.class 意味着什么

c# - 单元测试是否使 Debug.Assert() 变得不必要?

java - PowerMockito 和 CORBA 冲突