gpt4 book ai didi

c# - 如何使用依赖项的假对象对静态方法进行单元测试?

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:00 25 4
gpt4 key购买 nike

我已经准备好用于 HttpRequest 的 Fake 对象(包装器和接口(interface))......因为我不需要调用构造函数,如何在不破坏此方法接口(interface)的情况下传入假 HttpRequest?

public static int ParseQueryInt(string key, int defaultValue)
{
NameValueCollection nvc;
if (HttpContext.Current.Request.QueryString["name"] != null)
{
//Parse strings.
}
}

编辑:Akselson 的解决方案是最有创意的,而且这个概念证明很有效,令我惊讶的是,虽然我也使用了 Skeet 的解决方案,因为它看起来更有可能在所有情况下工作。
public class Class1
{
[Test]
public void Test()
{
HttpContext.Current = new HttpContext(
new HttpRequest("test.aspx", "http://test.com/test.aspx", "querystring=value"),
new HttpResponse(new StringWriter())
);
Assert.AreEqual(HttpContext.Current.Request.QueryString["querystring"], "value");
}
}

最佳答案

一种选择是引入另一个重载:

public static int ParseQueryInt(string key, int defaultValue)
{
return ParseQuery(key, defaultValue, HttpContext.Current.Request);
}

public static int ParseQueryInt(string key, int defaultValue,
HttpRequest request)
{
NameValueCollection nvc;
if (request.QueryString["name"] != null)
{
//Parse strings.
}
}

然后你将你的“不可测试”(或至少“难以测试”)代码减少到一个简单的重定向......你可以测试接受请求的版本。

关于c# - 如何使用依赖项的假对象对静态方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1308387/

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