如果您已经使用 FunSpec、FunSuite 或 FlatSpec,我发现 BeforeAndAfterAllConfigMap 很容易合并到现有的 scalatest 中。您所要做的就是使用 BeforeAndAfterAllConfigMap 导入和扩展您的测试。
您可以将参数传递给 scalatest 的一种方法是:
- 从命令行传递参数
系统或项目属性
- 在 build.gradle 文件中检索 [system|project] 属性
- 将步骤 2 中检索到的属性传递给
测试运行时。
这是 FlatSpec 中的一个完整示例,但在 FunSuite 中也很容易应用:
package com.passarg.test
import org.scalatest.{BeforeAndAfterAllConfigMap, ConfigMap, FlatSpec}
class PassArgsToScala extends FlatSpec with BeforeAndAfterAllConfigMap {
var foo = ""
override def beforeAll(configMap: ConfigMap) = {
// foo=bar is expected to be passed as argument
if (configMap.get("foo").isDefined) {
foo = configMap.get("foo").fold("")(_.toString)
}
println("foo=" + foo)
}
"Arg passed" must "be bar" in {
assert(foo === "bar")
info("passing arg seem to work ==> " + "foo=" + foo)
}
}
build.gradle
apply plugin: 'scala'
repositories {
mavenCentral()
}
dependencies {
compile 'org.scala-lang:scala-library:2.11.8'
testCompile 'org.scalatest:scalatest_2.11:3.0.0'
}
task spec(dependsOn: ['testClasses']) {
javaexec {
main = 'org.scalatest.tools.Runner'
args = ['-R', 'build/classes/test', '-o']
args += '-m'
args += 'com.passarg.test'
if (project.hasProperty("foo")) {
args += "-Dfoo=" + project.foo
}
classpath = sourceSets.test.runtimeClasspath
}
}
从命令行运行测试:
./gradlew -q spec -Pfoo=bar
结果:
$ ./gradlew -q spec -Pfoo=bar
...
Run starting. Expected test count is: 1
PassArgsToScala:
Arg passed
- must be bar
+ passing arg seem to work ==> foo=bar