2012-01-02 24 views
0

我使用easymock,我嘲笑我的UserService類。如何模擬服務的某些部分並測試其他人?

我UserService有幾個方法:

boolean canUserLogin(..); 
boolean canUserJoinClass(...); 

現在的一些方法相互調用,如果我測試方法#1我想存根/模擬方法#2和方法#3是在方法#1中調用。

我很困惑的是,我怎麼能嘲笑的一類零件和讓其他人運行的實際代碼?

所以我想實際測試UserService.method#1,但模擬UserService.method#2和UserService.method#3在內部方法#1調用。

回答

3

通過指定要嘲笑的方法的返回值;示例請參閱easymock docs

  • 「指定返回值」部分討論爲模擬方法創建返回值。
  • 「部分嘲諷」部分(接近底部)討論嘲笑實際類。

我同意文檔(和其他答案),這可能是粗略設計的指示。沒有進一步的細節,很難說它是多麼粗略,如果它是根本。

0

嘲諷旨在用於依賴,所以你可以在隔離測試。在這種情況下,您沒有任何依賴關係,因爲您調用的方法在一個類中。所以我不會在這裏使用模擬。

如果方法2和3是如此複雜,以至於你想測試方法1時嘲笑他們,那麼也許你應該出來放在各自的類(ES),所以你可以很容易地嘲笑他們。

1

您可以檢查一些庫就像EasyMock的,但我不知道它是否能做到這一點。

這裏是我的解決方案沒有第三方庫。創建一個UserService的子類,並覆蓋你想要模擬的方法。

class SubUserService{ 

    @override 
    boolean canUserJoinClass(...){ 
    return false; 
    } 

} 

但注意模擬方法不能是私人的。

如果這是你遇到一個真正的問題,您應該重構你的方法不同的類。

1

我知道Mockito支持真實物體上的「間諜」。我無法在Easy Mock中找到相應的對象。所以,我不確定你是否可以做到這一點。

話雖如此,這對我來說是一種氣味。你爲什麼需要嘲笑它?這是否表明您的對象做得太多,因此您需要嘲笑其他互動?另外,無論何時您需要擔心方法的實現(本例中的方法1),即它調用方法2和方法3,尤其是相同類的事實,這聽起來像是封裝泄漏。

相關問題