2014-10-18 44 views
0

我對單元測試比較陌生。我正在編寫一個小型的JavaScript庫,在這裏我優先考慮了一個友好的API,爲了方便使用,導致某些方法重疊。我應該如何對許多重疊的代碼進行單元測試?

舉一個簡單,假設的例子,考慮以下因素:

var BasicMath = function() {}; 

BasicMath.prototype.multiply = function(numA, numB) { 
    return numA * numB; 
}; 

BasicMath.prototype.square = function(num) { 
    return this.multiply(num, num); 
}; 

我應該怎樣單元測試代碼?

請注意,.square()只是一種方便的方法,它除了將參數兩次傳遞給.multiply()外,什麼都不做。

考慮到這一點,我應該:

  • 寫兩種方法相似(甚至相同的)單元測試?
  • 測試.square()調用.multiply()與某些參數? (我的理解是,這是不好的做法,因爲它過分依賴於這個方法的實現細節。)
  • 沒有測試.square()可言,因爲它本質上是多餘的.multiply()
  • 測試僅.square()的更一般的方面(如參數類型,數量等),以避免冗餘與.multiply()

或者一些其他的辦法?

請注意,上面的代碼只是一個人爲的例子 - 我問一個更普遍的問題,如何單元重疊/冗餘功能性的測試方法。

回答

0

例使用茉莉和興農:

測試乘以像任何其他方法:

it('multiplies two numbers', function() { 
    math = new BasicMath(); 
    expect(math.multiply(2,3)).toBe(6); 
} 

square,你要測試它調用multiply傳遞的兩個參數的num的值,並返回結果由multiply返回,但不執行任何其他邏輯:

it('squares a number', function() { 
    math = new BasicMath(); 
    math.multiply = sinon.stub(); 
    math.multiply.withArgs(2,2).returns(4); 

    expect(math.square(2)).toBe(4); 
} 

你這做的是使用一個存根,這將永遠指望在調用的是有兩個相同的ARGS創建一個可重複的環境(在這種情況下,2和2),測試那個廣場正在發送numnum(而不是num和例如num + 1),並返回調用的結果乘以(您可以告訴存根要返回'banana'並檢查'banana',重要的是square返回任何multiply返回)

相關問題