可以说我有以下类结构:
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 举报,一经查实,本站将立刻删除。