0

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

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

谢谢。

4

1 回答 1

4

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

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

Edit

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

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

所以你的代码看起来像:

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,所以方法可能不太正确。)

于 2012-07-16T21:35:58.233 回答