2016-04-27 40 views
0

我有一個單身Java屬性類(RepositoryProperties.java)從一個文本文件中讀取獲得由readFromSql方法的返回值:如何嘲笑一個屬性在JMock的測試文件讀取返回的值

public boolean readFromSql() { 
    String lPhase = getPilotProfileDatabaseTransitionPhase(); 
    if (lPhase.equals("PHASE_ONE_SQL")) { 
     return true; 
    } else 
     return false; 
} 

然後,當我想通過我的倉庫實現類添加一條記錄,我要檢查這個值就知道要執行哪個代碼塊:

if (RepositoryProperties.getInstance().readFromSql() 
     { 

..如果屬實,將數據寫入到SQL,否則跳過此塊

現在我需要爲我的存儲庫添加方法添加一個Jmock單元測試,以便readFromSql方法返回true(另一個測試將測試false值),而不會引入對文本文件的依賴關係。我擔心jmock對我來說是全新的,我無法弄清楚如何模擬readFromSql返回的值。我沒有setter方法。

我嘗試添加這一種期望,但它不是正確的方法(不認爲這屬於預期)和我的語法也有錯:

myMockContext.checking(new Expectations() { 
{ 
     RepositoryProperties.getInstance().readFromSql(); 
     will(returnValue(true)); 

真的很感激,關於如何一點點指導正確地做到這一點和在哪裏。

回答

0

JMock通常是圍繞嘲笑接口實例的想法而設計的。你可以得到它來模擬類的實例,雖然它不被推薦。你想要做的甚至比這更多 - 你想嘲笑一種靜態方法。這非常反對JMock的理念,Jmock會在你的每一步中爲你而戰。您可能需要查看其他模擬框架,如PowerMockMockito,這些框架在沒有明確測試縫(即注入接口)的情況下可以更靈活地使用模擬。

此外 - 單身模式是相當古老的學校這些天。使用該模式實現的單例創建測試問題,就像您所看到的那樣,並且通常可以更有效地使用DI範圍實現對單例行爲的真正需求。在這種情況下,你可能想考慮你需要一個單身人士 - 你可以改變它嗎?