2012-07-16 97 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