我是BDD的新手,甚至是整個測試世界。我應該如何測試BDD中值對象類型的「isEqual」方法?
我想在快速編寫一個簡單的線性代數庫時採取BDD的做法。所以會有很多的值對象類型,如Matrix
,Vector
等在編寫代碼時,我想我還需要堅持TDD原則(是嗎?):
不寫代碼的任何一行,而不一個失敗的測試
要實現一個值對象類型,我需要使其符合Equatable
協議並執行其==
運營商。這是添加代碼,所以我需要一個失敗的測試。如何爲這種情況編寫規範?
一個可以建議像一些方法:
describe("Matrix") {
it("should be value object") {
let aMatrix = Matrix<Double>(rows: 3, cols:2)
let sameMatrix = Matrix<Double>(rows: 3, cols:2)
expect(sameMatrix) == aMatrix
let differentMatrix = Matrix<Double>(rows: 4, cols: 2)
expect(differentMatrix) != aMatrix
}
}
這將是兩個原因一個醜陋的樣板:
- 可能有大量的值對象類型的,我需要重複所有其中
- 可能有很多情況會導致兩個對象不相等。以上述規格爲例,
==
的執行如return lhs.rows == rhs.rows
將通過測試。爲了揭示這個「bug」,我需要增加一個像expect(matrixWithDifferentColmunCount) != aMatrix
這樣的期望。再次,這種重複發生在所有值對象類型上。
那麼,我該如何優雅地測試這個「isEqual」(或operator==
)方法呢?或者我不應該測試它?
我正在使用swift和Quick進行測試框架。 Quick提供了一種稱爲SharedExample的機制來減少樣板。但是由於swift是一種靜態類型語言,Quick的共享示例不支持泛型,所以我不能直接使用共享示例來測試值對象。
我想出了一個workaround但不認爲它是一個優雅的。
這是真的(可悲)。 –