可以说我有以下类结构:
private string GlobalVariable = "foo";
public void MainMethod()
{
string bar = Baz();
}
public string Baz()
{
return GlobalVariable + "qux";
}
Run Code Online (Sandbox Code Playgroud)
我希望对Baz()使用不同的值进行单元测试GlobalVariable.但是GlobalVariable在方法中简单调用,而不是作为参数传递给它,我不能在单元测试方法中设置它.
因此我考虑将我的结构改为:
private string GlobalVariable = "foo";
public void MainMethod()
{
string bar = Baz(GlobalVariable);
}
public string Baz(string globalVar)
{
return globalVar + "qux";
}
Run Code Online (Sandbox Code Playgroud)
这样我现在可以更改globalVar单元测试中的参数值,以检查不同的输出.
但是,我的第一个结构更清晰,因为我没有不必要地将变量值作为参数传递给方法.
有没有办法充分利用这两个世界,而不必为了进行单元测试而妨碍我的结构?
我会想要一个单独的重载方法,然后我可以有一个参数和一个没有...
public string Baz()
{
return Baz(GlobalVariable);
}
public string Baz(string globalVar)
{
return globalVar + "qux";
}
Run Code Online (Sandbox Code Playgroud)
这里的好处是你仍然有你的无参数方法,可以从代码中调用,而不必担心每次都指定值,但是你有测试的重载,并且在你需要使用的情况下不同的价值.
虽然你仍然无法使用不同的值测试第一种方法,但我认为假设仅测试第二种功能就足够了.
或者,如果您使用的是C#4.0,则可以使用可选参数:
public string Baz(string globalVar = null)
{
if(string.IsNullOrEmpty(globalVar))
globalVar = GlobalVariable;
return globalVar + "qux";
}
Run Code Online (Sandbox Code Playgroud)