首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单元测试中有没有替代模拟对象的方法?

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

Stack Overflow用户
提问于 2010-01-09 02:58:52
回答 7查看 3.1K关注 0票数 4

它是一个Java (使用JUnit)企业Web应用程序,没有预先构建模拟对象,创建它们需要大量的时间。有没有一种测试范例可以给我“一些”测试覆盖率,但不是全部覆盖率?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-09 03:01:48

你有没有尝试过像EasyMock这样的动态模拟框架?它不需要您“创建”一个Mock对象,因为您必须编写整个类-您可以在测试本身中指定您想要的行为。

下面是一个使用UserService查找用户详细信息以便让某人登录的类的示例:

代码语言:javascript
复制
//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);
}
票数 6
EN

Stack Overflow用户

发布于 2010-01-09 03:11:40

(1)单元测试(和模拟)的替代方案包括集成测试(使用dbUnit)和FIT测试。更多信息,see my answer here

(2) mocking框架Mockito非常优秀。你不需要“预先构建”任何mock。将其引入到项目中相对容易。

票数 3
EN

Stack Overflow用户

发布于 2010-01-09 05:59:54

我会附和其他人对EasyMock的看法。然而,如果你有一个需要模拟静态方法调用、最终类或方法等东西的代码库,那么就让JMockit来看看吧。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2029943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档