我如何让 class 中的每个测试自动标记为特定标签

How do I have every test in class automatically tagged with a specific tag

我正在使用 flatspec 特征来创建我的测试,我想创建一个基础 class,它会自动用特定标签标记 class 中的任何测试。

例如,classes 中继承自 IntegrationTest class 的任何测试都将自动进行适当标记。所以代替:

  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)
  }

谢谢!

如果您愿意在测试 class 上使用直接注释而不是父注释 class,您可以使用 https://github.com/kciesielski/tags-demo 中的示例。针对您的示例进行了一些调整,您需要声明一个 Java class:

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测试class:

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

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

我尝试改为注释父对象 class,但无法正常工作。我可以想象这对您来说是否是一个重大问题,具体取决于您还想做什么。

实际上,org.scalatest.Tag class 的在线文档很好地描述了所有这些,尽管我说 开始工作之后通过在 GitHub..

上关注上述项目

因为 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。

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

之后,ExampleSpec 将被标记为 tags.RequiresIntegrationStuff。

您将在此处找到工作项目:https://github.com/wojda/tags-demo (based on https://github.com/kciesielski/tags-demo from )