2015-11-08 22 views
1

我很新的測試,並試圖在我目前的項目中「正確」。大部分函數都非常簡單,但我堅持使用大部分其他類/函數調用的類/函數,以及是否應該測試它們。如何在沒有任何邏輯的情況下對函數進行單元測試?

例如說我有這兩個功能類:

public MyObject LoadObject(string path) 
{ 
    string[] lines = fileService.ReadAllLines(path); 
    return myParser.Parse(lines); 
} 

public void SaveObject(MyObject, string path) 
{ 
    string[] lines = myConverter.Convert(MyObject); 
    fileService.WriteAllLines(path, lines); 
} 

我想我可以模擬出myConverter,myParser和的FileService,然後檢查是否轉換(),解析(),ReadAllLines()和WriteAllLines()已經被調用,但這真的給了我什麼?

+0

你不單元測試功能,你測試功能。這些課程是做什麼的?通過他們的名字,我假設他們保存並加載對象。所以你會寫一個測試來保存一些東西,然後加載它並檢查加載的數據是否正常。 – JJJ

+0

這只是一個例子,但我並不覺得這是直截了當的。大部分工作當然是myConverter/myParser,而且這些工作是單獨測試的(所以不需要在這裏測試)。我的觀點是,當我主要做其他對象的事情時,我應該測試什麼或者我應該測試它?我可以驗證呼叫是否已完成(並且有正確的參數),並想知道這是人們通常在這些情況下做什麼,或者他們是否只是跳過測試它們(除了稍後在集成測試中可能) – user1776562

回答

0

你想測試一下'該功能是否符合你的期望'。而你所期望的並不是某些其他功能被調用。你期望的是,在某些投入的情況下,某些產出會發生。

考慮LoadObject(可能應該將其稱爲ParseFile)。它讀取一個文件並解析它。所以你想測試的是如果你給它一個已知的文件會發生什麼:它是否按預期解析它?

您應該單獨測試Parse知道如何解析合法的一組行,並且ReadAllLines正確地將文件轉換爲行。在他們特定的單元測試中,您可以非常徹底地練習這兩種功能的邊緣情況。但是,對於這個類的目的,您只需測試聚合是否正常工作。

單元測試問的問題是這樣的:假設我的依賴關係正確實現,這個特定功能單元的行爲是否正確?因此,留出一個fileService.ReadAllLines,返回一個靜態字符串或引發異常或其他類別的行爲真實ReadAllLines展品。留出一個myParser.Parse,它返回一個靜態數據結構或者將這些行與預期的輸入進行比較。

這個功能並不深刻。它不應該需要大量的測試來充分運用它。

+0

是的名字很漂亮不好(剛剛完成)。但我喜歡你的答案,並會嘗試在我的代碼中執行此操作,謝謝! – user1776562

相關問題