使用junit和easymock保留一个模拟对象

时间:2012-07-16 21:29:35

标签: java unit-testing easymock

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

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

感谢。

1 个答案:

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