我想对创建/更新系统环境变量的函数进行单元测试。 那么如何在C#中使用Nunit测试上述函数?
答案 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.GetEnvironmentVariable
和Environment.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());