在单元测试中是否有替代模拟对象的方法?

4 java junit unit-testing

它是一个Java(使用JUnit)企业Web应用程序,没有预先构建的模拟对象,并且需要花费大量时间来估计它们.是否有测试范例可以给我"一些"测试覆盖率,但不是总覆盖范围?

mat*_*t b 6

您是否尝试过像EasyMock这样的动态模拟框架?它不需要你"创建"Mock对象,因为你必须编写整个类 - 你在测试本身中指定你想要的行为.

一个类的示例,该类使用a UserService来查找有关用户的详细信息以便记录某人:

//Tests what happens when a username is found in the backend
public void testLoginSuccessful() {
    UserService mockUserService = EasyMock.createMock(UserService.class);

    EasyMock.expect(mockUserService.getUser("aUsername")).andReturn(new User(...));
    EasyMock.replay(mockUserService);

    classUnderTest.setUserService(mockUserService);

    boolean isLoggedIn = classUnderTest.login("username");
    assertTrue(isLoggedIn);
}

//Tests what happens when the user does not exist
public void testLoginFailure() {
    UserService mockUserService = EasyMock.createMock(UserService.class);

    EasyMock.expect(mockUserService.getUser("aUsername")).andThrow(new UserNotFoundException());
    EasyMock.replay(mockUserService);

    classUnderTest.setUserService(mockUserService);

    boolean isLoggedIn = classUnderTest.login("username");
    assertFalse(isLoggedIn);
}
Run Code Online (Sandbox Code Playgroud)