Scala 中类似于 Groovy 的“Power assert”之类的东西?

Sea*_*ull 1 groovy assert scala scalatest

我想知道是否有什么东西可以给我类似于 Groovy 的 nice power assert 语句的结果。

> assert ["1", '2']*.size() == [2, 3]

Result: Assertion failed: 

assert ["1", '2']*.size() == [2, 3]
                   |      |
                   [1, 1] false
Run Code Online (Sandbox Code Playgroud)

AFAIKscalatest我目前使用的语言和 . 但也许有人可以建议一些辅助图书馆这样做?这是一个宠物项目,所以实验性的和没有得到很好支持的库是可以的。

编辑:我知道匹配器(scalatest 的,甚至是普通的 java hamcrest 匹配器)。我发现他们写起来很冗长,而且他们的输出缺乏细节。

上面的示例显示了中间计算步骤,有助于检测错误。它向您展示了经过测试的代码有什么问题,并提供了更多详细信息。

我希望,引入这种行为需要在运行时获得有关表达式 AST 的信息。但我想,这些信息可以通过使用宏来“烘焙”编译时间。

即,如果我们有表达式assert a + b == cscala(或我正在寻找的一些宏扩展)可以将其重写为:

if (!(a + b == c)) {
  // detailed message is
  // compute a
  // compute b
  // compute a + b
  // compute c
  // compute a + b == c
  // Make it pretty.

  throw new AssertionFailedException(prettyDetailedMessage)
}
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找它是否已经实施,如果是 - 在哪里。

Gui*_*ose 5

在 ScalaTest 中,您可以使用 DiagrammedAssertions。见http://www.scalatest.org/release_notes/2.2.0#diagrammedAssertions

这是基于 Expecty 的,它是 Spock 功率断言的基于宏的实现。见https://github.com/pniederw/expecty