それまでの間、使用できるカスタムマッチャーを次に示します。
def containElement[T](right: Matcher[T]) = new Matcher[Seq[T]] {
def apply(left: Seq[T]) = {
val matchResults = left map right
MatchResult(
matchResults.find(_.matches) != None,
matchResults.map(_.failureMessage).mkString(" and "),
matchResults.map(_.negatedFailureMessage).mkString(" and ")
)
}
}
次に、ScalaTestHave
マッチャーの全機能を使用して、オブジェクトのフィールドを検査できます。
val books = List(Book("Moby Dick", "Melville"),
Book("Billy Budd", "Melville"),
Book("War and Peace", "Tolstoy"))
books should containElement(have('title("Moby Dick")))
books should containElement(have('title("Billy Budd"), 'author("Melville")))
books should containElement(have('title("War and Peace"), 'author("Melville")))
最後の 1 つは、この出力を生成する失敗です。
オブジェクト Book(Moby Dick,Melville) の title プロパティの値は、その期待値「War and Peace」ではなく「Moby Dick」であり、 title プロパティの値は、その期待値「War and Peace」ではなく、値「Billy Budd」でした。 "、オブジェクト Book(Billy Budd,Melville) およびオブジェクト Book(War and Peace,Tolstoy) の author プロパティの値は、期待値 "Melville" ではなく "Tolstoy" でした
and
マッチャーをor or
、 usenot
などと組み合わせることもできます。