我正在尝试实现一个“简单”的util库,它将带注释的scalatest套件放在一个Suites实例中,为它们提供一定的运行环境。
trait MyContext extends BeforeAndAfterAll {
//declarations of values
override def beforeAll() = {/* run various init procedures */}
override def afterAll() = {/* tear everything down */}
}
该部分有效,如果我自己编写套件实例,我可以使用它。 我想编写的代码是使用宏的scala注释,它将采用所有带注释的org.scalatest.Suite子类型并生成Suites类,如下所示:
class testThisInContext extends StaticAnnotation{ /* ... */}
@testThisInContext
class TestOne extends WordSpec {}
@testThisInContext
class TestTwo extends FlatSuite {}
然后会生成:
class InContextSuites extends Suites(new TestOne, new TestTwo) with MyContext {}
并通过向它们添加@org.scalatest.DoNotDiscover
注释来修改类(以避免执行超出上下文)。
当带注释的类不是Suite的子类(这会使生成的类无法编译)时,我需要一种方法来中断宏的应用程序(并抛出错误)。
我还没想出如何在ClassDef的修饰符实例中键入检查注释(以便在需要时添加注释)。