同时反对多个 JVM 中正在运行的应用程序(objectswithmainmethods)和 ScalaTest 测试。对于多个零碎互相通信的集成测试很有用。
建设
多 JVM 测试是一个 sbt 插件,您能够在 https://github.com/sbt/sbt-mu…。要在您的我的项目中配置它,您应该执行以下步骤:
1. 通过将以下内容增加到您的 project/plugins.sbt 中,将其增加为插件:
2. 通过启用 MultiJvmPlugin 并设置 MultiJvm 配置,将 multi-JVM 测试增加到 build.sbt 或 project/Build.scala。
请留神,默认状况下,MultiJvm 测试源位于 src/multi-jvm/… 中,而不位于 src/test/… 中。
运行测试
多 JVM 工作与惯例工作类似:test,testOnly 和 run,然而在 multi-jvm 配置下。
因而,在 Akka 中,要在 akka 近程我的项目中运行所有的多 JVM 测试,请应用(在 sbt 提示符下):
或者能够先更改为 akka-remote-tests 我的项目,而后运行测试:
要运行单个测试,请应用 testOnly:
能够列出多个测试类名来运行多个特定测试。sbt 中的制表符实现性能使实现测试名称变得容易。
也能够通过在测试名称和 – 之后增加 testOnly 来指定 JVM 选项。例如:
创立应用程序测试
通过命名约定来发现并组合测试。MultiJvm 测试源位于 src/multi-jvm/… 中。应用以下模式命名测试:
也就是说,每个测试的名称两头都有 MultiJvm。它之前的局部将单个 TestName 下的测试 / 应用程序组合在一起,它们将一起运行。前面的局部 NodeName 是每个分叉 JVM 的区别名。
因而,要创立一个名为 Sample 的 3 节点测试,您能够创立以下三个应用程序:
当在 sbt 提示符下调用 multi-jvm:runsample.Sample 时,将生成三个 JVM,每个节点一个。它看起来像这样:
更改默认值
您能够为分叉的 JVM 指定 JVM 选项:
您能够通过将以下配置增加到我的项目中来更改多 JVM 测试源目录的名称:
您能够更改 MultiJvm 标识符。例如,要将其更改为 ClusterTest,请设置 multiJvmMarker:
当初,您的测试应命名为 {TestName}ClusterTest{NodeName}。
JVM 实例的配置
您能够为每个衍生的 JVM 定义特定的 JVM 选项。为此,您能够创立一个以测试中的节点命名的文件,后缀为.opts,并将其放在与测试雷同的目录中。
例如,要将 JVM 选项 -Dakka.remote.port=9991 和 -Xmx256m 提供给 SampleMultiJvmNode1,让咱们创立三个 *.opts 文件并将这些选项增加到它们中。用空格分隔多个选项。
SampleMultiJvmNode1.opts:
SampleMultiJvmNode2.opts:
SampleMultiJvmNode3.opts:
ScalaTest
还反对创立 ScalaTest 测试而不是应用程序。为此,请应用与上述雷同的命名约定,但要创立 ScalaTest 套件,而不要应用 object 创立 main 函数。您须要在类门路上具备 ScalaTest。这是与上述示例相似的示例,但应用的是 ScalaTest:
要仅运行这些测试,能够在 sbt 提示符下调用 multi-jvm:testOnlysample.Spec。
多节点增加
SbtMultiJvm 插件也做了一些补充,以适应该局部中形容的 may change 模块 multi node testing。
示例我的项目
Cluster example project 是一个示例我的项目,能够下载并带有如何运行的阐明。
该我的项目阐明了集群性能,还包含带有 sbt-multi-jvm 插件的 MultiJVMTesting。