C#中的模拟系统环境变量

本文关键字:环境变量 模拟系统 | 更新日期: 2023-09-27 17:58:21

我想对创建/更新系统环境变量的函数进行单元测试。那么,如何在C#中使用Nunit测试上述函数呢?

C#中的模拟系统环境变量

将创建/更新类中环境变量的实际调用包装起来,这些环境变量可以依赖性地注入到代码中。你需要的两个电话是:

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.GetEnvironmentVariableEnvironment.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);
    }
}