オブジェクトのリストに特定の一致フィールドを持つオブジェクトが含まれていることをテストで確認したいと思います。例えば:
class ListTest extends ScalaTesting {
class MyData(val one:Int, val two:Int) {
}
val listOfMyData = List(new MyData(1,2), new MyData(3,4)
listOfMyData should contain (a mydata object with field two matching 4)
}
明らかに、これは実際には機能しません
リストのフィールドをアサートする必要があるときはいつでも.map
、リストを調べて値を比較します。
例えば。
class SomeSpecs extends FunSuite with Matchers {
test("contains values") {
case class MyData(field1: Int, field2: Int)
List(new MyData(1,2), new MyData(3,4)).map(_.field2) should contain (4)
}
}
そして、List(new MyData(1,2), new MyData(3,9)).map(_.field2) should contain (4)
エラーをスローしますList(2, 9) did not contain element 4
。
2番目のアプローチは
List(new MyData(1, 2), new MyData(3, 9)).count(_.field2 == 4) > 0 shouldBe true
// or
List(new MyData(1, 2), new MyData(3, 4)).count(_.field2 == 4) should be > 0
しかし、これについて私が気に入らないのは、その真偽です。例えば。List(new MyData(1, 2), new MyData(3, 11)).count(_.field2 == 4) shouldBe true
エラーをスローしますfalse was not equal to true
最初のアプローチは、入力データと期待されるものを提供するため、それ以上のことを教えてくれます。少なくとも、テストをリファクタリングする際には、最初のアプローチが役立つと思います。
3番目のアプローチは
List(new MyData(1, 9), new MyData(3, 4)).filter(_.field2 == 4) should not be empty
しかし、私の願いはまた、のようなものを持っていたscalatestList(new MyData(1,2), new MyData(3,4)) should contain (MyData(_, 4))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加