2014-04-02 58 views
11

对scala宏执行测试的建议方式是什么?如何测试Scala宏?

我意识到需要两个项目,因为需要单独编译。如果有必要,这一步是可以接受的,而且大部分是清楚的

但是,你应该如何声明宏扩展失败呢?如果没有特殊的设施,测试用例将无法编译,因此整个测试项目将无法编译。

我觉得这个断言需要形式

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

返回内宏的编译错误的另一个宏。测试也需要相同的警告,如果他们应该等等......

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

+4

+1。另请参阅[有关在Scala中进行非编译测试的这个问题](http://stackoverflow.com/q/15125457/334519)和[关于记录Scala宏的这个问题](http://stackoverflow.com/q/13840784/334519)。 –

+0

前面的问题确实有很好的答案。感谢指针! –

回答

2

您可以使用assertDoesNotCompileScalaTest。下面是一个使用这个测试斯卡拉typechecker的例子:

import org.scalatest.FunSuite 

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

您可以通过含有当你的宏扩展应该不assertDoesNotCompile的一个例子的字符串。请注意,如果您觉得需要这个,也有assertCompiles