Specs2 + Scalacheck使用不同的字符串生成元组

时间:2015-02-17 21:51:01

标签: scala specs2 scalacheck

我必须测试一个无循环图,并且总是检查字符串是否不同是不是很有用(它会抛出异常)。必须有一个更好的解决方案,但我无法想出它,我在specs2文档中丢失了。 这是代码的一个例子:

"BiDirectionalEdge" should {
"throw an Error for the wrong DirectedEdges" in prop {
  (a :String, b :String, c :String, d :String) =>
    val edge1 = createDirectedEdge(a, b, c)
    val edge2 = createDirectedEdge(c, b, d)
    new BiDirectionalEdge(edge1, edge2) must throwA[InvalidFormatException] or(a mustEqual d)
}

如果a和c相同,createDirectedEdge将抛出异常(我对该行为有不同的测试)。

1 个答案:

答案 0 :(得分:1)

是的,有更好的方法 - 这正是条件属性的用途。只需添加您的条件,然后添加==>

"BiDirectionalEdge" should {
  "throw an Error for the wrong DirectedEdges" in prop {
    (a: String, b: String, c: String, d: String) => (a != c) ==>
      val edge1 = createDirectedEdge(a, b, c)
      val edge2 = createDirectedEdge(c, b, d)
      new BiDirectionalEdge(edge1, edge2) must
        throwA[InvalidFormatException] or(a mustEqual d)
  }
}

如果条件可能经常失败,您应该采取不同的方法(有关详细信息,请参阅the ScalaCheck guide),但在您的情况下,条件属性是完全合适的。