2017-09-06 64 views
0

我試圖使用JUnit和Mockito來模擬端到端方法(addSomething方法)。很明顯,在這種方法中,我使用其他方法。 我的疑惑是:我如何使用mockito來模擬另一個類中的類方法

  • 嘲笑端到端的方法我也需要嘲笑其他方法呢?
  • 如何模擬addSomething方法內部的方法?

因爲我想要的一個簡單的例子是:

方法

public int summing(int sum){ 
int A = 5; 
int B = 23; 

sum = SumOfIntegers(A,B); 
return sum; 
} 

方法B

private int SumOfIntegers(int number1, int number2){ 

try{ 
    result = number1 + number2; 
}catch (Exception e) { 
     e.printStackTrace(); 
} 
return result; 
} 

如何嘲笑類的方法的自它正在調用一個私有方法?

+1

@邁克爾謝謝你,aprecciate那。 –

+0

您能否告訴我們您正在嘗試做什麼(使用發佈的代碼作爲支持,即不要說「方法」,而是說「方法XXX」)。謝謝 –

+0

@RC。我編輯了這個問題,但基本上我的問題的主要目標是:它值得嘲笑addSomething類?如果是,我該怎麼辦? –

回答

0

如果你打算對範圍在被測方法的本地範圍內的對象進行模擬,那麼這可能是使用類似PowerMock的東西,但實際上這通常表明你的代碼寫得不好,很容易測試。

我會推薦重構你的代碼,以確保任何具有你想模擬的方法的對象應該被包含在使用依賴注入的類級別。用mockito來嘲笑這一點非常簡單,只需在測試中用@Mock註釋標記這些對象,並用@InjectMocks標記測試的類。這將確保在測試中將對象的模擬注入到測試中的類中,而不是實際的對象實例,然後可以將所有您喜歡的方法存根。

0

你不嘲笑方法,你嘲笑整個類,並讓他們響應你需要的方式,如果他們的方法被調用。 然後,如果您在類中使用方法A,並且此方法A使用方法B,則您只模擬方法A.類中的代碼不會執行,因此您不需要模擬整個鏈。這是嘲弄的一點。這是你問的嗎?

所以你從不嘲笑你在Main方法中使用的方法。

+0

感謝您的幫助。我現在已經明白了你說了什麼,但是我仍然無法通過嘲弄方法A來通過單元測試。我不知道爲什麼。 –

1

您需要模擬addSomething()所屬的類。

假設您有一個使用該方法的類。

public class ClassB { 
    public String methodB(String jsonSomething) { 
    ... 
    String result = addSomething("{}"); 
    ... 
    } 
} 

public class ClassA { 
    public String addSomething(String jsonSomething) { 
    ... 
    } 
} 

在您的測試類ClassB的你會嘲笑對象的ClassA,你會爲addSomething法規定的行爲。您不需要爲addSomething中的內容指定任何模擬行爲。

@RunWith(MockitoJRunner.class) 
public class ClassBTest { 
    @Mock 
    private ClassA classA; 

    @Test 
    testMethodB() { 
    given(classA.addSomething(anyString())).willReturn("{}"); // Here you are specifying the mocked behavior for addSomething 
    ... 
    } 
} 
+0

嗨@alayor。謝謝你的回答,但我認爲你理解它很糟糕。我沒有像你在這裏提供的代碼那樣的2個類,我有一個類在她內部的方法。我試圖嘲笑這個類,並測試該方法唯一的問題是該方法裏面有另一個方法,我只是無法找到一個方法。我是單元測試新手,我對此感到瘋狂。 –

+0

立即檢查帖子。我已經更新了我想要的更清晰的示例 –

+1

您不應該嘲笑正在測試的課程。你可以做的是把你的私人方法放在另一個班,然後嘲笑那個班。 – alayor

2

單元測試驗證的單位,這是返回值和其依賴的通信


你的情況的問題是,存在的公衆觀察到的行爲隱藏的依賴關係到ServerProxy。 你不應該實例化它的那個方法,而不是在這個類在所有...

如果您遵循嚴格的分離的顧慮/單責任模式依賴性的實例是其自身的責任,不應該由使用依賴關係的對象完成。

總之,你應該通過依賴注入注入一個ServerProxy對象插入到被測單元,優選作爲構造函數的參數,最有可能使用一個DI框架。在這種情況下,用一個可以爲測試配置的模擬代替ServerProxy是微不足道的。

相關問題