代码之家  ›  专栏  ›  技术社区  ›  k0pernikus

如何使用scala标记akka测试工具包中的测试?

  •  1
  • k0pernikus  · 技术社区  · 8 年前

    我想标记某些测试,以便(而不是)在某些场景中运行它们。(例如。 slow 只应在构建期间运行,而不应在开发期间运行。)

    在Scala中使用ScalaTest的FlatSpec我知道我可以使用 taggedAs 和scalatest's Tag .

    然而,我不知道如何在演员测试中达到同样的效果。我有扩展的测试用例 TestKit 而且似乎没有FlatSpec提供的taggedAs功能。

    我希望能够通过

    sbt "testOnly -- -l myTag" # runs all except the tagged tests
    sbt "testOnly -- -n myTag" # only runs the tagged tests
    

    我如何使用akka的测试框架实现这一点?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Jeffrey Chung    8 年前

    阿克卡的 TestKit 假设使用测试框架。从 documentation :

    Akkas自己的测试套件是使用 ScalaTest ,这也在文档示例中大放异彩。然而,TestKit及其工具并不依赖于该框架,您可以使用最适合您的开发风格的工具。

    换句话说,一个人使用 测试套件 与ScalaTest这样的框架结合使用。混入 测试套件 以及你想使用的任何最具规模的特征(例如。, FlatSpec )您可以使用 taggedAs .

    例如,考虑Akka的一个内部测试, SupervisorHierarchySpec ,使用 测试套件 带ScalaTest标记:

    class SupervisorHierarchySpec extends AkkaSpec(SupervisorHierarchySpec.config) with DefaultTimeout with ImplicitSender {
      ...
      "A Supervisor Hierarchy" must {
    
        "restart manager and workers in AllForOne" taggedAs LongRunningTest in {
           ...
        }
        ...
      }
    }
    

    此测试扩展 AkkaSpec ,这是一个混合了两者的抽象类 测试套件 和最具规模的特征:

    abstract class AkkaSpec(_system: ActorSystem)
      extends TestKit(_system) with WordSpecLike with Matchers with BeforeAndAfterAll with WatchedByCoroner
      with ConversionCheckedTripleEquals with ScalaFutures {
      ...
    }
    

    和 LongRunningTest 是ScalaTest标记。

        2
  •  0
  •   Markus1189    8 年前

    可以在中添加新注释 Java语言 文件如下:

    package org.acme;
    
    import org.scalatest.TagAnnotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @TagAnnotation
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE})
    public @interface IntegrationTest { }
    

    然后,您可以这样标记您的套件:

    @IntegrationTest
    class AcmeTest extends ... {
    }
    

    最后,您可以通过将其传递给 -l org.acme.IntegrationTest (请注意FQCN)

    推荐文章