scala - 如何测试 Scala 宏?

标签 scala scala-macros

对 Scala 宏执行测试的建议方法是什么?

我意识到由于需要单独编译,因此需要两个项目。如果有必要,这一步是可以接受的,而且基本上是清楚的。

但是你如何断言宏扩展在它应该失败的时候失败呢?如果没有一些特殊的工具,测试用例将无法编译,因此整个测试项目将无法编译。

我认为这个断言需要另一个形式的宏

errors(code: => _): List[CompileError]

它返回内部宏的编译错误。测试是否会发生警告(如果它们应该发生)也需要同样的......

是否有一些现有的 Scala 宏测试工具?

最佳答案

您可以使用 assertDoesNotCompile 来自 ScalaTest .这是一个使用它来测试 Scala 类型检查器的示例:

import org.scalatest.FunSuite

class TypeTest extends FunSuite {
  test("String vals can't hold ints") {
    assertDoesNotCompile("val x: String = 1")
  }
}

您可以传递一个包含宏扩展何时失败的示例的字符串到 assertDoesNotCompile .请注意,还有 assertCompiles ,如果你觉得有必要。

关于scala - 如何测试 Scala 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22811063/

相关文章:

sbt - 在 sbt 项目中编译 Scala 2.10-RC3 宏

scala - Scala trait 和 C++ 概念之间的区别

scala - 无法在 Scala 中调用重载构造函数

scala - 无法在简单示例上从 spark ML 运行 RandomForestClassifier

scala - 编译器将结构类型用于在白盒宏内生成的案例类

scala - 如何键入检查 Def Def

scala - 什么时候大小写在语法上很重要?

list - 长的 scala 范围

scala - 这可以用 Scala 宏来完成吗?

Scala 宏 : finding Option's enclosed type