2013-02-15 85 views
0

當我必須檢查返回無法手動(值)的值的函數時,我在單元測試中遇到了這種奇怪的情況。實際上這個函數是爲了創建這個值而做的。因此測試這樣的(JavaScript和QUnit框架):單元測試冗餘比較值

asyncTest("UTF-8 - ArrayBuffer conversion", 1, function() { 
    var arrayBuffer; 
    var testUtf8 = "łużyński"; 
    var blob = new Blob([testUtf8]); 
    var f = new FileReader(); 
    f.onload = function(e) { 
     arrayBuffer = e.target.result; 
     start(); 
    }; 
    equal(utf8ToArrayBuffer(testUtf8), arrayBuffer, "UTF-8 to ArrayBuffer, OK!"); 
}); 

是redunant,因爲準備arrayBuffer變量,它與返回的值進行比較其實是一樣的使用utf8ToArrayBuffer(testUtf8),所以測試應該是這樣的:

equal(utf8ToArrayBuffer(testUtf8), utf8ToArrayBuffer(testUtf8), "UTF-8 to ArrayBuffer, OK!"); 

我應該測試這樣的事情還是離開它?或者也許有另一種方法呢?

回答

0

你不應該測試這兩個相同的函數調用返回相同。你應該測試函數調用的結果是你所期望的。在你的情況下,這意味着你有一個值("łużyński")作爲輸入,並且你得到一個數組緩衝區作爲輸出。您可以測試輸入值是否實際包含在輸出中。

但是,如果沒有測試功能代碼(utf8ToArrayBuffer()),很難說您可以測試什麼。

+0

嗯,我寫了準備比較的價值與我測試的功能相同。然而,實施應該不重要,因爲這是TDD,我必須先寫測試。我現在所知道的是,'utf8ToArrayBuffer(testUtf8)'必須返回arrayBuffer,並對其值進行轉換。現在我必須檢查,如果返回值是確定的。我可以將這個arrayBuffer轉換回文本,但是我將不得不使用另一個函數'arrayBufferToUtf8',它具有與測試相同的問題。所以這就像冗餘的交叉測試。 – 2013-02-15 17:22:34

+0

對我來說這是非常有意義的,因爲這兩個函數的代碼都可以獨立更改。但由於它是一個如此小的功能,你不應該擔心它。如果你想測試的不僅僅是返回值,你可以考慮使用模擬,看看它是否被正確的操縱。 – Odi 2013-02-15 17:49:11