当前位置:  开发笔记 > 编程语言 > 正文

如何测试需要环境变量的代码?

如何解决《如何测试需要环境变量的代码?》经验,为你挑选了1个好方法。

我有一些代码需要环境变量才能正确运行.但是当我运行我的单元测试时,它一旦达到那个点就会爆炸,除非我专门在终端中输出变量.我正在使用Scala和sbt.我的代码做了这样的事情:

class something() {

  val envVar = sys.env("ENVIRONMENT_VARIABLE")

  println(envVar)

}

我如何在单元测试中模拟这个,这样每当调用sys.env("ENVIRONMENT_VARIABLE")时,它会返回一个字符串或类似的东西?



1> Yuriy Tumakh..:

如果无法包装现有代码,则可以更改UnmodifiableMap System.getenv()以进行测试.

def setEnv(key: String, value: String) = {
  val field = System.getenv().getClass.getDeclaredField("m")
  field.setAccessible(true)
  val map = field.get(System.getenv()).asInstanceOf[java.util.Map[java.lang.String, java.lang.String]]
  map.put(key, value)
}

setEnv("ENVIRONMENT_VARIABLE", "TEST_VALUE1")

如果需要测试控制台输出,可以使用单独的PrintStream.您还可以实现自己的PrintStream.

val baos = new java.io.ByteArrayOutputStream
val ps = new java.io.PrintStream(baos)
Console.withOut(ps)(
  // your test code
  println(sys.env("ENVIRONMENT_VARIABLE"))
)

// Get output and verify
val output: String = baos.toString(StandardCharsets.UTF_8.toString)
println("Test Output: [%s]".format(output))
assert(output.contains("TEST_VALUE1"))

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有