【问题标题】:Request.Querystring is null when use unit test使用单元测试时,Request.Querystring 为空
【发布时间】:2012-09-10 08:58:20
【问题描述】:

我想为 ASP.NET MVC 应用程序创建 Nunit 测试用例。如果 ASP.NET 使用 Request.QueryString 或 Request.Url。那么单元测试用例将返回空引用异常,因为如果控件仅来自 UI,则 Request.querystring 将返回该值。

那么请您帮忙为使用 Httpcontext.Request 属性的 MVC 控制器创建单元测试。

【问题讨论】:

    标签: asp.net unit-testing


    【解决方案1】:

    您的单元测试在 HttpContext 之外运行,因此您需要模拟 HttpContext 或更改您的架构以解决该问题,示例如下所示:

    http://volaresystems.com/Blog/post/Dont-mock-HttpContext.aspx

    【讨论】:

    • 感谢您的更新 Burt。你能告诉我使用模拟概念的命名空间吗?
    • 阅读这篇文章,我可以更深入地了解该主题:simple-talk.com/dotnet/asp.net/…
    • 嗨,伯特,感谢您的更新。我的控制器示例代码如下。 public ActionResults index() { if(Request.Url.ToString()=="www.abc.com") { return RedirecttoAction("About"); } 返回视图(); } 单元测试代码如下: [Test] public void testIndex(){ SampleController controller = new SampleController(); ActionResult result = controller.Index() as ViewResult;} 当控件转到 Request.URL 时,会抛出空引用异常。 您能告诉我如何初始化单元测试项目中的 Request.URL 或 Request.QueryString 值吗?
    • 您需要模拟出依赖关系,例如你不应该从被测代码中调用 Request.Anything 。如果你把代码放在一个接口后面,你可以模拟调用并给出你想要的任何返回结果,让你能够测试你的代码。
    • 嗨,伯特,感谢您的帮助。可以给我一个模拟接口的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多