java - Mockito 模拟不适用于此方法。难道我做错了什么?

标签 java testing junit mocking mockito

我目前在这个 spring mvc 应用程序中使用 mockito 1.8.4。这是我要测试的类/方法的代码。

public class CompleteTaskController implements IController {
    public static Logger log = Logger.getLogger(CompleteTaskController.class);

@Override
public void handle() {
    GUIFactory gf = new GUIFactory();
    IDatabasePullListOfUsers pull = new OraclePullListOfUsers();
    IDatabaseUserManagement manage = OracleUserManagement.getInstance();

    gf.makeGUI("completeTask", pull.pullAssignedRequests(GUIFactory.userLoggedIn));
    manage.completeTask(gf.getRequestID(), GUIFactory.userLoggedIn);
    gf.makeCustomGUI("Task has been completed");
    log.fatal(GUIFactory.userLoggedIn + " has completed the task of request id " + gf.getRequestID());
    gf.makeGUI("adminpanel");

}

}

到目前为止,所有测试都通过了,但最后一个 - 我似乎不明白为什么。这是我的测试代码:

public class CompleteTaskControllerTest {

    @Test
    public void testHandleCallsMakeGUIAndPassesItPullAssignedRequestsAndAString(){
        CompleteTaskController mockCtc = mock(CompleteTaskController.class);
        GUIFactory mockGf = mock(GUIFactory.class);
        IDatabasePullListOfUsers mockPull = mock(OraclePullListOfUsers.class);

        mockCtc.handle();

        verify(mockGf).makeGUI("test", mockPull.pullAssignedRequests("test"));
    }

    @Test
    public void testHandleCallsCompleteTaskAndPassesItGetRequestIDAndAString(){
        CompleteTaskController mockCtc = mock(CompleteTaskController.class);
        IDatabaseUserManagement mockManage = mock(OracleUserManagement.class);
        GUIFactory mockGf = mock(GUIFactory.class);

        mockCtc.handle();
        when(mockGf.getRequestID()).thenReturn(1);

        verify(mockManage).completeTask(mockGf.getRequestID(),"Test");
    }

    @Test
    public void testHandleCallsMakeCustomGUIAndPassesItAString(){
        CompleteTaskController mockCtc = mock(CompleteTaskController.class);
        GUIFactory mockGf = mock(GUIFactory.class);

        mockCtc.handle();

        verify(mockGf).makeCustomGUI("test");
    }
}

很抱歉向您抛出所有这些代码 - 我遇到的唯一测试是第三个测试 - 它试图模拟 gf.makeCustomGUI("Task has been completed") 方法!

最佳答案

用语句

verify(mockGf).makeCustomGUI("test");

您是否正在尝试验证是否已使用参数“test”调用“makeCustomerGUI”。如果这是您的要求,您可以按以下方式进行:

GUIFactory mockGf = mock(GUIFactory.class);
mockGf.makeCustomerGUI("test");
verify(mockGf).makeCustomGUI("test");

创建模拟对象后,Mockito 将记住对它的所有调用。因此,您可以有选择地验证调用。

关于java - Mockito 模拟不适用于此方法。难道我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18513672/

相关文章:

java - 从多个 UnitTest 类为 Junit TestMethods 创建 TestSuite

java - 模拟时 junit 出错

java - 如何使用 JSQLparser 从 "From Clause"获取多个子查询?

java - java.util.@Nullable 是什么意思?

java - 在子包java中导入 super 包

单击按钮后 JavaFX 出现无限循环错误

c# - 在外国Windows上测试,这可能吗?

android - 如果 gradle-android-test-plugin 测试失败,不要让 gradle 构建失败

java - 在 Camel 中模拟文件端点

visual-studio - Appium WinAppDriver C# 计算器示例错误