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)
所以,问题是如何传递这个论点以及如何获得它.
在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)
我发现了有趣的特征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)
| 归档时间: |
|
| 查看次数: |
4790 次 |
| 最近记录: |