2012-07-16 44 views
0

因此,我使用easymock来模拟我的数据层对象,同时进行单元测试。 我正在使用JPA进行持久性。例如。 Project project = EasyMock.cre ..(Project.class);等坚持用junit和easymock模拟对象

现在我想测试的方法得到这个项目做了一些东西,然后坚持它调用坚持(项目)。项目是一个嘲弄的对象,所以它在这里抛出我的错误。我的经理告诉我,因为你只是想测试方法的功能。从数据库的返回值不是imp,这就是为什么你应该使用模拟而不是真正的数据库。所以如果这种方法持续存在方法调用,我该怎么办?

谢谢。

+1

取决于你要测试的内容。 – esej 2012-07-16 21:33:04

+0

我不想测试它是否一直存在。考虑我只是想测试这些方法是否被正确调用。 – Sara 2012-07-16 21:33:51

回答

4

你应该嘲笑实体经理而不是实体。

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

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了一段时间,所以这些方法可能不完全正确。)

+0

谢谢,我认为这是我需要的。所以对于我的实体管理器,我目前有这样的东西:EntityManager entityManager = Persistence.createEntityManagerFactory(“AutomationCreatePU”)。createEntityManager();你能否解释一下我可以如何模拟实体经理。或者任何链接?谢谢。 – Sara 2012-07-16 21:39:16

+1

@Sara - 使用与创建模拟项目相同的方法,并将其传递到待测试的类中。 – 2012-07-16 21:48:10

+0

Thaks一堆。我会尝试并回复你。 :) – Sara 2012-07-16 22:03:06