所以我在单元测试时使用 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/