私たちの開発では、TDD を使用しているため、次のようなテストがいくつかあります。
"User" should {
"return 'Mike' if its name is 'Mike'" in {
val user = User("Mike")
user.getName === "Mike"
}
"return 20 if its age is 20" in {
val user = User(age = Some(20))
user.getAge === Some(20)
}
}
ここで書いているテストは「単体テスト」のようなものです。
次に、specs2 が、より表現しやすい別の種類の構文を提供していることがわかりました。これに興味があります。
def is = s2"""
User can have name and age, and we have ways to get them, say, if we have a user whose name is "Mike" and the age is "20",
- we can the name "Mike" [$e1]
- also can get the age 20 [$e2]
"""
def e1 = {
val user = User("Mike")
user.getName === "Mike"
}
def e2 = {
val user = User(age = Some(20))
user.getAge === Some(20)
}
TDDで試してみたいのですが、すぐにこの種のテストは「受け入れ仕様」であることがわかりました。私の頭に浮かんだ強い質問があります:
「TDD」と言うと、どのようなテストですか? それらは「単体テスト」でなければなりませんか?「受け入れ仕様」を使用して実装を推進することは良い習慣ですか?