我剛剛進入TDD Rails。讓我困惑的是「什麼時候寫測試」。所有指南都建議您在編寫任何代碼之前編寫測試,但是如果我在創建Person模型之後編寫任何代碼之前編寫以下測試;Rails TDD - 先寫什麼
p = Person.new
p.firstname = "mikey"
p.lastname = "hogarth"
assert_equal p.fullname, "mikey hogarth"
然後測試本身不會失敗,它會崩潰!因爲我還沒有實現「全名」方法,所以會出現運行時錯誤。因此,在我編寫代碼之前,我不可能讓測試失敗。
TDD編碼器通常如何處理這種情況?它基本上是用虛擬方法存根還是有更好的方法?
===編輯===
建議了很多很棒的點子。我最終決定以下選項達到了我想要做的最優雅的事情;
if p.respond_to? "fullname"
assert_equal "Mikey Hogarth", p.fullname
else
flunk "fullname not implemented"
end
===第二個編輯===
如果您在這個答案絆倒,看來我的整個方法TDD是問題,因此,儘管上面的代碼將工作是不是好的做法。
爲什麼不嘗試測試是否定義了p.fullname? – prusswan
我認爲這可能是這樣的,我正在玩這種語法: p = Person.new; methods =%q {name firstname fullname}; methods.each {| method |斷言p.respond_to?方法 }。 這是人們通常如何做的嗎? –
@MikeyHogarth我建議您通過示例瞭解Kent Beck的測試驅動開發。雖然它使用Java,但本書中的概念適用於任何語言。它被認爲是TDD的「Hello World」書。 http://www.amazon.co.uk/Test-Driven-Development-Addison-Wesley-Signature/dp/0321146530 – Finglas