它是一个Java (使用JUnit)企业Web应用程序,没有预先构建模拟对象,创建它们需要大量的时间。有没有一种测试范例可以给我“一些”测试覆盖率,但不是全部覆盖率?
发布于 2010-01-09 03:01:48
你有没有尝试过像EasyMock这样的动态模拟框架?它不需要您“创建”一个Mock对象,因为您必须编写整个类-您可以在测试本身中指定您想要的行为。
下面是一个使用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);
}发布于 2010-01-09 03:11:40
(1)单元测试(和模拟)的替代方案包括集成测试(使用dbUnit)和FIT测试。更多信息,see my answer here。
(2) mocking框架Mockito非常优秀。你不需要“预先构建”任何mock。将其引入到项目中相对容易。
发布于 2010-01-09 05:59:54
我会附和其他人对EasyMock的看法。然而,如果你有一个需要模拟静态方法调用、最终类或方法等东西的代码库,那么就让JMockit来看看吧。
https://stackoverflow.com/questions/2029943
复制相似问题