使用ScalaTest将其他参数传递给测试

ale*_*lex 2 testing scala scalatest

目前我正在使用IntelliJ Idea 15和Scalatest框架进行一些单元测试.我需要将自己的参数传递给测试,并以某种方式从代码中读取它们.例如:假设我有这样的课程

class Test extends FunSuite {
   test("Some test") {
       val arg = // here I want to get an argument which I want to pass. Something like args("arg_name")
       println(arg)
       assert(2 == 2)
   }
}
Run Code Online (Sandbox Code Playgroud)

并且通过参数运行测试我想做类似的事情

test -arg_name=blabla
Run Code Online (Sandbox Code Playgroud)

所以,问题是如何传递这个论点以及如何获得它.

che*_*ohi 7

scalatest中,我们可以使用configMap传递命令参数.

有一个使用configMap的例子:

import org.scalatest.{ConfigMap, fixture}

class TestSuite extends fixture.Suite with fixture.ConfigMapFixture{
  def testConfigMap(configMap: Map[String, Any]) {
    println(configMap.get("foo"))
    assert(configMap.get("foo").isDefined)
  }
}

object Test {
  def main(args: Array[String]): Unit = {
    (new TestSuite).execute(configMap = ConfigMap.apply(("foo","bar")))
  }
}
Run Code Online (Sandbox Code Playgroud)

我们也可以使用命令行参数运行测试:

scala -classpath scalatest-<version>.jar org.scalatest.tools.Runner -R compiled_tests -Dfoo=bar
Run Code Online (Sandbox Code Playgroud)

最新的跑步者 ConfigMapFixture测试


ale*_*lex 7

我发现了有趣的特征BeforeAndAfterAllConfigMap.这个有一个带有参数configMap:ConfigMap的beforeAll方法.所以这是我的解决方案:

class Test extends FunSuite with BeforeAndAfterAllConfigMap {

  override def beforeAll(configMap: ConfigMap) = {
    //here will be some stuff and all args are available in configMap
  }

  test("Some test") {
    val arg = // here I want to get an argument which I want to pass. Something like args("arg_name")
    println(arg)
    assert(2 == 2)
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 那应该是`BeforeAndAfterAllConfigMap`.常规`BeforeAndAfterAll`不采用ConfigMap (4认同)