同时反对多个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。