2015-10-05 125 views
0

我見過很多如何測試某個方法是否被調用的例子。但爲什麼要這樣做呢?測試任何所述方法的結果會不會更有效?爲什麼要測試一個方法是否被調用?

如果我想測試添加(X,Y)只是爲了看看它被稱爲...爲什麼我不只是斷言,添加(X,Y)== X + Y?在這種情況下,我不僅驗證了方法正在被調用,而且實際上我正在驗證該方法在同一個測試中正在做什麼。

即使在測試方法被稱爲X倍的情況下,說求和(N),它會叫加N次一共拿到N + N - 1 ... + 0;在測試添加被調用的次數時,我仍然無法看到它的價值。

可能有人給了一些有用的建議,到開始測試工程師明白這一點。也許一個爲什麼測試一個方法被調用的例子很重要,爲什麼不僅僅測試它的結果會更有必要呢?

一些澄清,我猜是necassary。具體來說,我正在考慮Mockito.verify方法。爲什麼只想驗證一個方法是否被調用。我對Mockito.Verify的理解如下。

public void testSummation(){ 
    Calculator.Summation(X); 
    //which I guess I would assume called Add() X times. 
    Verify(Calculator times(x).add(); 

(注意:這只是一個普通的例子不是實際的代碼,我已經寫了),但你爲什麼要驗證插件被稱爲X倍?不會測試Summation返回的適當值是一個更好的測試嗎?

+0

你應該測試兩者。 –

+0

也可以生成單元測試,然後可能很容易調用並查看是否拋出異常,而不是立即開始一些可計算的事情。由於後者也會得到例外,這是一種收集點 - 無意義。 –

回答

0

拿這個舉例來說

public Integer AddSum(Int a, Int b){ 
    Integer x= a+b; 
    // Testing : Log message to confirm x=a+b was completed 
    String f = x; 
    //Testing : Log message here does NOT get called as the above statement cause code to crash 
    return x; 
} 

一個函數可以有它的許多地方,你想知道哪一行崩潰/或檢查意外的數據值之前達到的功能。在這個例子中,如果我們只添加了兩個數字,它並沒有真正改變,但是一旦完成了其他的工作,它就變得非常重要。例如,任何代碼使用一個JSONObjects應該總是被記錄/測試,因爲他們往往會給錯誤,可能會非常棘手,處理

0

好了,另外的例子是罰款只是單元測試,你注意到了。

但是假設你正在構建一個計算器應用程序,顯然,當一個用戶請求加法運算(您的通話添加(X,Y))你所期望的結果呈現給用戶。

你當然會需要測試的加法運算(斷言加(X,Y)== X + Y),但你會如何測試的結果呈現給用戶?您是否需要一種方法來驗證printResult(用於打印結果的方法的名稱)是否被調用?

1

測試對象應該正常工作。給定一些定義的輸入不僅可以正確設置內部狀態,還可以通過定義的接口以正確的方式與其他對象進行協作。函數調用通常是對象之間已定義接口的一部分,因此測試測試對象是否遵循這些接口的規則很重要。換句話說,使用正確的參數在正確的時間調用正確的方法並正確處理響應。

+0

那麼,什麼時候應該使用這個,而不僅僅是測試結果?是否應該驗證每個被調用的方法被稱爲預期的次數?應該在什麼時候測試這種預期的行爲,以及什麼時候......進行不必要的測試? – Lencalot

相關問題