如何测试Scala宏?

11

在Scala宏上进行测试的建议方法是什么?

我意识到由于需要单独编译,因此需要两个项目。如果必要,这一步是可以接受并且大多数情况下很清晰。

但是,在何种情况下如何断言宏扩展失败呢?如果没有某些特殊工具,则测试用例将无法编译,因此整个测试项目也无法编译。

我认为这个断言需要另一个类似的宏。

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

该内部宏的编译错误会返回,如果需要测试警告是否发生等情况,则同样需要这样做...

是否存在用于Scala宏的现有测试工具?


前面的问题确实有令人满意的答案。感谢指引! - Martin Ring
2个回答

3

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

这个答案仍然是测试宏的惯用方式吗,@Guillaume? - Kevin Meredith
1
@KevinMeredith 这个项目已经过时了。请查看Travis Brown的评论以获取最新的方法。 - Guillaume Massé

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接