微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

可以说我有以下类结构:

private string GlobalVariable = "foo";

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

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

我希望使用GlobalVariable的不同值对Baz()进行单元测试.但是,由于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";
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐