在Scala宏上进行测试的建议方法是什么?
我意识到由于需要单独编译,因此需要两个项目。如果必要,这一步是可以接受并且大多数情况下很清晰。
但是,在何种情况下如何断言宏扩展失败呢?如果没有某些特殊工具,则测试用例将无法编译,因此整个测试项目也无法编译。
我认为这个断言需要另一个类似的宏。
errors(code: => _): List[CompileError]
该内部宏的编译错误会返回,如果需要测试警告是否发生等情况,则同样需要这样做...
是否存在用于Scala宏的现有测试工具?
在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
。