C#中的模拟系统环境变量
本文关键字:环境变量 模拟系统 | 更新日期: 2023-09-27 17:58:21
我想对创建/更新系统环境变量的函数进行单元测试。那么,如何在C#中使用Nunit测试上述函数呢?
将创建/更新类中环境变量的实际调用包装起来,这些环境变量可以依赖性地注入到代码中。你需要的两个电话是:
string value = Environment.GetEnvironmentVariable("variableName")
Environment.SetEnvironmentVariable("variableName", "value");
后者总是以字符串作为值。
然后包装器类将看起来像这样:
class MyEnvironment
{
public string GetVariable(string variableName)
{
return Environment.GetEnvironmentVariable(variableName);
}
public void SetVariable(string variableName, string value)
{
Environment.SetEnvironmentVariable(variableName, value);
}
}
然后在测试套件中注入模拟创建/更新的mock类。这将测试代码的逻辑。
被嘲笑的类看起来像这样:
class MockEnvironment
{
private Dictionary<string, string> _mockEnvironment;
public string GetVariable(string variableName)
{
return _mockEnvironment[variableName];
}
public void SetVariable(string variableName, string value)
{
// Check for entry not existing and add to dictionary
_mockEnviroment[variableName] = value;
}
}
您需要测试包装器类,以确保它确实创建/更新了系统环境变量,但您只需要这样做一次。
我无法回答嘲笑环境变量的问题,您必须为此编写自己的Environment
类。
在访问/设置环境变量的一般范围内,可以使用Environment.GetEnvironmentVariable
和Environment.SetEnvironmentVariable
。
例如,
Assert.IsEqual("test", Environment.GetEnvironmentVariable("test-var");
对于设置,
Environment.SetEnvironmentVariable("test-var", "test");
我使用了一个设置-拆卸模型。
public class TestClass
{
private string variable;
[OneTimeSetUp]
public void OneTimeSetUp()
{
variable = Environment.GetEnvironmentVariable("VARIABLE");
}
[OneTimeTearDown]
public void OneTimeTearDown()
{
Environment.SetEnvironmentVariable("VARIABLE", variable);
}
[SetUp]
public void SetUp()
{
Environment.SetEnvironmentVariable("VARIABLE", null);
}
}