ScalaTest 如何分析断言表达式?
How does ScalaTest analyzes assert expressions?
当 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
和
当 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
和