如何从单元测试更改应用程序的 NSProcessInfo 环境字典?

How to change app's NSProcessInfo environment dictionary from a unit test?

我的应用程序中有以下代码。它的行为可以通过在其进程信息的 environment 字典中设置 "MY_KEY" 键来改变。

func myMethod() {
  var environment = NSProcessInfo.processInfo().environment
  if environment["MY_KEY"] { /* do something /* }
}

我想在单元测试中对此进行测试。问题是在单元测试中更改环境字典不会影响应用程序中的字典。

class MyAppTests: XCTestCase {
  func testMe() {
    var environment = NSProcessInfo.processInfo().environment
    environment["MY_KEY"] = "my value"
    myMethod()
    // The app's environment does not change
  }
end

是否可以通过单元测试更改应用程序的环境字典?

NSProcessInfo 提供的环境是只读的。您可以使用 setenv c 函数设置环境变量(从 Swift 起可以正常工作),如下所示:

setenv("MY_KEY", "my value", 1)