如何使用特定标记自动标记每个测试类

时间:2015-01-08 18:12:49

标签: scalatest

我正在使用flatspec特性来创建我的测试,我想创建一个基类,它将使用特定标记自动标记该类中的任何测试。

例如,继承自IntegrationTest类的类中的任何测试都将自动进行适当标记。所以而不是:

  class ExampleSpec extends FlatSpec {
      "The Scala language" must "add correctly" taggedAs(IntegrationTest) in {
      val sum = 1 + 1
      assert(sum === 2)
  }

我想这样做,仍然将测试标记为IntegrationTest

  class ExampleSpec extends IntegrationSpec {
      "The Scala language" must "add correctly" in {
      val sum = 1 + 1
      assert(sum === 2)
  }

谢谢!

2 个答案:

答案 0 :(得分:4)

如果您愿意在测试类而不是父类上使用直接注释,则可以使用https://github.com/kciesielski/tags-demo处的示例。根据您的示例进行了某种改编,您需要声明一个Java类:

package tags;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@org.scalatest.TagAnnotation
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface MyAnnotation {
}

然后使用它来注释Scala测试类:

@tags.MyAnnotation
class ExampleSpec extends FlatSpec {
  "The Scala language" must "add correctly" in {
  val sum = 1 + 1
  assert(sum === 2)
}

然后,您必须使用实际字符串tags.MyAnnotation来指定要运行(或忽略)的标记。

我尝试注释一个父类,但我无法让它工作。我可以想象它对你来说是一个重大问题,取决于你想要做什么。

实际上,org.scalatest.Tag类的在线文档可以很好地描述所有这些,尽管我在通过在GitHub上执行上述项目来实现之后的

答案 1 :(得分:4)

由于可以继承ScalaTest 2.2.0标记(http://www.scalatest.org/release_notes/2.2.0)。

  1. 将@Inherited添加到注释定义中。

    package tags;
    
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.ElementType.TYPE;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    **@Inherited**
    @org.scalatest.TagAnnotation
    @Retention(RUNTIME)
    @Target({METHOD, TYPE})
    public @interface RequiresIntegrationStuff {
    }
    
  2. 注释您的基本规范。

    @RequiresIntegrationStuff
    class IntegrationSpec extends FlatSpec {}
    
  3. 只需将您的基本规范用作基类。

    class ExampleSpec extends IntegrationSpec {
        "The Scala language" must "add correctly" in {
        val sum = 1 + 1
        assert(sum === 2)
    }
    
  4. 之后,ExampleSpec将被标记为tags.RequiresIntegrationStuff。

    您可以在此处找到工作项目:https://github.com/wojda/tags-demo(基于https://github.com/kciesielski/tags-demoSpiro Michaylov's answer