加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:55:40 所属栏目:百科 来源:网络整理
导读:可以说我有以下类结构: 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();
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读