用junit和easymock持久化一个模拟对象



所以我在单元测试时使用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了,所以方法可能不太正确。)

最新更新