gpt4 book ai didi

c# - 使用全局变量的单元测试方法

转载 作者:行者123 更新时间:2023-11-30 14:12:29 25 4
gpt4 key购买 nike

假设我有以下类结构:

private string GlobalVariable = "foo";

public void MainMethod()
{
string bar = Baz();
}

public string Baz()
{
return GlobalVariable + "qux";
}

我希望对 Baz() 使用不同的 GlobalVariable 值进行单元测试。然而,由于 GlobalVariable 只是在方法中调用,而不是作为参数传递给它,所以我无法在我的单元测试方法中设置它。

因此我考虑将我的结构更改为:

private string GlobalVariable = "foo";

public void MainMethod()
{
string bar = Baz(GlobalVariable);
}

public string Baz(string globalVar)
{
return globalVar + "qux";
}

这样我现在可以在我的单元测试中更改参数值 globalVar 以检查不同的输出。

但是,我的第一个结构更加简洁,因为我没有不必要地将变量值作为参数传递给方法。

有没有一种方法可以两全其美,而不必为了运行单元测试而阻碍我的结构?

最佳答案

我很想有一个单独的重载方法,然后我可以有一个带参数的方法和一个不带参数的方法...

public string Baz()
{
return Baz(GlobalVariable);
}

public string Baz(string globalVar)
{
return globalVar + "qux";
}

这里的好处是您仍然拥有可以从代码中调用的无参数方法,而不必担心每次都指定值,但是您有用于测试的重载,并且在您曾经这样做的情况下需要使用不同的值。

虽然您仍然无法使用不同的值测试第一个方法,但我认为可以安全地假设仅测试第二个函数就足够了。


或者,如果您使用的是 C# 4.0,则可以使用 optional parameters相反:

public string Baz(string globalVar = null)
{
if(string.IsNullOrEmpty(globalVar))
globalVar = GlobalVariable;
return globalVar + "qux";
}

关于c# - 使用全局变量的单元测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com