【问题标题】:Seq empty test with specs2使用 specs2 进行 Seq 空测试
【发布时间】:2012-09-12 17:48:09
【问题描述】:

如何检查 Seq[String] 是否为空或未在 Scala 中使用 specs2?我正在使用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)

【问题讨论】:

  • 如果您发布了编译器给出的确切代码和相应的错误消息,您可能会更幸运。
  • 是的,请添加一个更完整的示例。我认为您的案例可能是“经典”类型推断问题的一个实例,其中您有连续的匹配器表达式由换行符分隔,例如“ret.length must be greaterThan(0) \n ret.lenght must beLowerThan(10)”(如果是这种情况,我将编辑此评论作为正确答案)

标签: unit-testing scala specs specs2


【解决方案1】:

我认为类型不匹配错误是由您发布的代码之外的其他代码引起的。

你的例子应该只适用于:

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
  }
}

【讨论】:

  • 有什么理由不默认使用beEmpty
  • @OrangeDog 只有 'beempty' 优于 'beEmpty' 的优雅才能成为一个论点。它们在语义上是相同的。
  • 这两个选项都不适用于 mutable.Specs2 v 4.10.6 的规范
  • @AlbertBikeev 欢迎您编辑答案。现在已经 8 岁了,所以也许整个问题已经失去了相关性?
【解决方案2】:

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

ret must not have size (0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多