如何测试Scala宏?

时间:2014-04-02 12:11:27

标签: scala scala-macros

在scala宏上执行测试的建议方法是什么?

我意识到由于需要单独编译,需要两个项目。如有必要,此步骤可以接受并且大部分都是清楚的。

但是你怎么断言宏扩展失败呢?如果没有一些特殊的工具,测试用例就不会编译,因此整个测试项目都不会编译。

我认为这个断言需要另一个格式为

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

返回内部宏的编译错误。如果它们应该发生警告,那么测试警告就会出现同样的情况......

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

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)