所以我在单元测试时使用easymock来模拟我的数据层对象。 我正在使用JPA来保持持久性。例如。项目项目= EasyMock.cre ..(Project.class);等
现在我要测试的方法让这个项目做了一些事情然后继续调用persist(项目)。 project是一个模拟对象,所以它在这里引发了我的错误。我的经理告诉我,因为您只想测试该方法的功能。 db的返回值不是imp,这就是为什么你应该使用mocking而不是real db。所以如果这种方法有持久的方法调用,我该怎么办?
感谢。
答案 0 :(得分:4)
你应该嘲笑实体经理而不是实体。
实体只是一个你可以轻松创建的pojo,你需要看看是否在实体管理器上调用了持久化。
Edit
看起来您正在通过静态方法在类的测试中创建实体管理器的实例。没有简单的方法来嘲笑它。
您应该使用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所以方法可能不太正确。)