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

时间:2016-07-24 17:44:35

标签: c# nunit

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

3 个答案:

答案 0 :(得分:6)

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

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

然后在您的测试套件中注入模拟创建/更新的模拟类。这将测试代码的逻辑。

模拟的类看起来像这样:

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;
    }
}

您需要测试包装类以确保它确实实际创建/更新系统环境变量,但您只需要执行一次。

答案 1 :(得分:3)

我无法回答模拟环境变量,你必须为此编写自己的Environment类。

在访问/设置环境变量的一般范围内,您可以使用Environment.GetEnvironmentVariableEnvironment.SetEnvironmentVariable

例如,

Assert.IsEqual("test", Environment.GetEnvironmentVariable("test-var");

和设置,

Environment.SetEnvironmentVariable("test-var", "test");

答案 2 :(得分:0)

我使用设置拆卸模型。

List<Post> duplicates = posts1.stream()
                .map(Post::getText)
                .filter(posts2.stream().map(Post::getText).collect(Collectors.toSet())::contains)
                .map(Post::new)
                .collect(Collectors.toList());