所以我在单元测试时使用easymock来模拟我的数据层对象。我使用JPA是为了持久性。例如,Project Project=EasyMock.cre..(Project.class);等
现在,我想要测试的方法获取这个项目做了一些事情,然后通过调用persistent(project)将其持久化。该项目是一个模拟对象,所以它在这里给我带来了错误。我的经理告诉我,因为你只想测试这个方法的功能。db的返回值不是imp,这就是为什么应该使用mocking而不是real db。所以,如果这个方法有持久方法调用,我该怎么办?
谢谢。
您应该嘲笑实体管理器,而不是实体。
实体只是一个可以轻松创建的pojo,您需要查看实体管理器是否调用了持久化。
Edit
这看起来像是通过静态方法在类下的测试中创建实体管理器的实例。没有简单的方法来嘲弄它。
您应该使用依赖项注入将实体管理器传递给使用它的对象。然后,您可以直接传递mock实例,而不是传递真正的实现。
所以你的代码看起来像:
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了,所以方法可能不太正确。)