java - 使用 junit 和 easymock 持久保存模拟对象

标签 java unit-testing easymock

所以我在单元测试时使用 easymock 来模拟我的数据层对象。 我使用 JPA 来实现持久性。例如。项目project = EasyMock.cre..(Project.class);等等

现在我想测试的方法让这个项目做一些事情,然后调用 persist(project) 来持久化它。项目是一个模拟对象,所以它在这里抛出错误。我的经理告诉我,因为您只想测试该方法的功能。数据库的返回值不是 imp,这就是为什么您应该使用模拟而不是真实的数据库。那么如果这个方法有persist方法调用,我该怎么办?

谢谢。

最佳答案

您应该 mock 实体管理器而不是实体。

实体只是一个您可以轻松创建的pojo,您需要查看是否在实体管理器上调用了持久化。

编辑

看起来您正在通过静态方法在类下的测试中创建实体管理器的实例。没有简单的方法可以模拟它。

您应该使用 dependency injection 将实体管理器传递给使用它的对象。 。然后,您可以只传递模拟实例,而不是传递真正的实现。

所以你的代码看起来像这样:

Project project = ...    

EntityManager manager = EasyMock.createStrictMock(EntityManager.class); 
ClassUnderTest test = new ClassUnderTest(manager)

//You expect this to be called    
manager.persist(project);

EasyMock.replay(manager);

//The method you are testing
test.save(project);

EasyMock.verify(manager);

(我已经有一段时间没有使用easymock了,所以方法可能不太正确。)

关于java - 使用 junit 和 easymock 持久保存模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11512860/

相关文章:

java - 如何检查java项目中的类是否存在?

java - 测试 void 方法的行为

ios - 使用 Xcode 7.3/8 在 iOS 上进行 GTest

java - 什么是 Mockito 等价于 expect().andReturn().times()

java - 在 Spring roo 应用程序中显示 jasper 报告 HTML 页面(Web 应用程序)

java - 将 .jtl 报告转换为 jp@gc 图表

node.js - 如何测试方法回调的内容

java - 对调用静态方法的类进行单元测试

java - EasyMock 和修改可变方法参数

java - 如何使用 Spring Integration 处理外部系统的异步文件处理?