簡體   English   中英

單元測試-何時/如何存根?

[英]Unit testing - when/how to stub?

我試圖在單元測試我的代碼方面變得更好-包括嘗試一些tdd。 我有一個問題是我應該如何測試解析csv文件的對象。 讓我舉一個小例子...

class EventLog {
    parse() {
        // load csv file, create array of Events
    }

    getEvents(options) {
        // depending on options, return correct set of events
    }
}

class Event {}

因此,首先,我想為我的getEvents方法編寫測試,以確保不同的選項產生正確的結果。 在這種情況下,我是否想創建一個存根以進行分析以使我可以通過一組Events ,然后對該數據集運行測試?

其次,我將需要測試解析方法。 計划測試一些簡單的事情,例如文件不存在,格式不符合預期,創建正確的Events等。為此,我應該只存儲一些示例.csv文件來滿足我的需要嗎? 還是將loadCsv()方法拔出並存根會更有效?

該班使用有多難?

如果很容易,例如解析器需要一些字符串,那么您可以考慮直接使用它。 使用ES6類,您甚至可以聲明一個新class TestEventLog extends EventLog並將繼承用作最小的存根。 這開銷最少,是我最喜歡的策略。

如果該類特別復雜,請記住,對於小型(單元)測試,您希望專注於一小部分代碼。 如果看到正在測試的類中有大量方法正在調用,則說明測試存根很差。

在這種情況下,我可能首先繼承並替換:

class TestEventLog extends EventLog {
  parse() {
    // ignore arguments, return known test data
    return [['foo', 1], ['bar', 2]];
  }
}

指導原則應該是引入盡可能少的代碼。 為支持測試而編寫的代碼越多,需要測試的代碼就越多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM