【发布时间】:2023-03-17 16:17:01
【问题描述】:
当 ScalaTests 失败时,测试框架会输出如下详细的错误输出:
assert(a == b || c >= d)
// Error message: 1 did not equal 2, and 3 was not greater than or equal to 4
它如何理解断言表达式的结构?它是使用一些 Scala 技巧来覆盖比较运算符还是可以访问 Scala 编译器的 AST?
【问题讨论】:
当 ScalaTests 失败时,测试框架会输出如下详细的错误输出:
assert(a == b || c >= d)
// Error message: 1 did not equal 2, and 3 was not greater than or equal to 4
它如何理解断言表达式的结构?它是使用一些 Scala 技巧来覆盖比较运算符还是可以访问 Scala 编译器的 AST?
【问题讨论】:
assert 的实现由宏提供,所以 - 简而言之 - 是的,它可以访问 AST。
如果对具体细节感兴趣,建议看一下源码:https://github.com/scalatest/scalatest/blob/d40d278f2bb8e73431b942d87881fb6dbab75cb9/scalatest/src/main/scala/org/scalatest/AssertionsMacro.scala
和
【讨论】: