【问题标题】:How to tag tests in akka's TestKit using scala?如何使用scala在akka的TestKit中标记测试?
【发布时间】:2018-05-25 02:23:04
【问题描述】:

我想标记某些测试以便(不)在某些情况下运行它们。 (例如 slow 应该只在构建过程中运行,而不是在开发过程中。)

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

但我不知道如何在演员测试中实现相同的目标。我有扩展 TestKit 的 TestCase,并且似乎没有 FlatSpec 提供的 taggedAs 功能。

我希望能够通过

过滤入/出测试
sbt "testOnly -- -l myTag" # runs all except the tagged tests
sbt "testOnly -- -n myTag" # only runs the tagged tests

如何使用 akka 的测试框架实现这一目标?

【问题讨论】:

  • 对我来说,Akka TestKit 并没有什么特别之处,而是使用的测试框架。

标签: scala unit-testing akka actor scalatest


【解决方案1】:

Akka 的TestKit 假设使用了一个测试框架。来自documentation

Akka 自己的测试套件是使用 ScalaTest 编写的,这在文档示例中也很突出。但是,TestKit 及其工具不依赖于该框架,您基本上可以使用最适合您的开发风格的框架。

换句话说,将TestKit 与ScalaTest 之类的框架结合使用。将TestKit 和任何你想使用的ScalaTest 特征(例如FlatSpec)混合到你的测试中,你可以使用taggedAs

例如,考虑 Akka 的内部测试之一,SupervisorHierarchySpec,它使用带有 ScalaTest 标记的 TestKit

class SupervisorHierarchySpec extends AkkaSpec(SupervisorHierarchySpec.config) with DefaultTimeout with ImplicitSender {
  ...
  "A Supervisor Hierarchy" must {

    "restart manager and workers in AllForOne" taggedAs LongRunningTest in {
       ...
    }
    ...
  }
}

此测试扩展了AkkaSpec,这是一个混合了TestKit 和ScalaTest 特征的抽象类:

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

LongRunningTest 是一个ScalaTest 标签。

【讨论】:

    【解决方案2】:

    您可以像这样在 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-25
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多