使用specs2进行seq空测试

时间:2012-09-20 11:03:54

标签: unit-testing scala specs specs2

如何在Scala中使用specs2检查Seq[String]是否为空?我使用的是seq must be emptyseq.length must be greaterThan(0),但我最终总是遇到类型不匹配错误。

ret is Seq[String]

ret.length must be greaterThan(0)

[error] ApiTest.scala:99: type mismatch;
[error]  found   : Int
[error]  required: org.specs2.matcher.Matcher[String]
[error]         ret.length must be greaterThan(0)

2 个答案:

答案 0 :(得分:5)

我认为类型不匹配错误是由另一部分代码引起的,而不是您发布的代码。

您的示例应该与:

一起使用
ret must not be empty

我已经尝试并确认工作正常:

 "Seq beEmpty test" should {
    "just work" in {
      Seq("foo") must not be empty
    }
  }

如果每次测试使用多个断言,可能会遇到麻烦,例如以下内容无法编译:

"Seq beEmpty test" should {
  "just work" in {
    List() must be empty
    Seq("foo") must not be empty
  }
}

这是意料之外的,但可以通过帮助编译器轻松修复:

"Seq beEmpty test" should {
  "just work" in {
    List() must beEmpty
    Seq("foo") must not beEmpty
  }
}

答案 1 :(得分:1)

尝试使用specs2匹配器have size。由于大小不能为负数,如果不为零,则必须大于零。因此,我们可以使用:

ret must not have size (0)