首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何对MVC UserViewControl进行单元测试?

如何对MVC UserViewControl进行单元测试?
EN

Stack Overflow用户
提问于 2008-10-23 10:03:44
回答 6查看 2.1K关注 0票数 7

我已经尝试了一段时间,想用ASP.NET MVC为UserViewControl编写一个单元测试。我想看一下类似下面这样的代码:

代码语言:javascript
代码运行次数:0
运行
复制
[TestMethod]
public void HaveControlToDisplayThings()
{
    var listControl = new ControlUnderTest();
    var viewData = new ViewDataDictionary<IList<string>>(this.repo.GetMeSomeData());

    // Set up a ViewContext using Moq.
    listControl.SetFakeViewContext(viewData);
    listControl.ViewData = viewData;
    listControl.RenderView(listControl.ViewContext);

    // Never got this far, no idea if this will work :)
    string s = listControl.ViewContext.HttpContext.Response.Output.ToString();
    Assert.AreNotEqual(0, s.Length);
    foreach (var item in this.repo.GetMeSomeData())
    {
        Assert.IsTrue(s.IndexOf(item) != -1);
    }
}

不幸的是,无论我怎么尝试,都会收到来自RenderView内部的错误。这是(据我所知)静态HttpContext.Current对象无用造成的--我从System.Web.UI.Page.SetIntrinsics获取NullReferenceExceptions。

我尝试使用Phil Haack的HttpSimulator,它给了我一个HttpContext对象,但我发现我还需要指定一个伪HttpBrowserCapabilities对象才能更进一步:

代码语言:javascript
代码运行次数:0
运行
复制
Subtext.TestLibrary.HttpSimulator simulator = new HttpSimulator();
simulator.SimulateRequest();
var browserMock = new Mock<HttpBrowserCapabilities>();
browserMock.Expect(b => b.PreferredRenderingMime).Returns("text/html");
browserMock.Expect(b => b.PreferredResponseEncoding).Returns("UTF-8");
browserMock.Expect(b => b.PreferredRequestEncoding).Returns("UTF-8");
HttpContext.Current.Request.Browser = browserMock.Object;

现在,我在该对象的属性访问上得到了异常。我尽我所能地嘲笑了许多人,但似乎毫无进展。

有没有人能做到这一点?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-12-23 23:37:09

不幸的是,ASP.NET视图引擎在ASP.NET托管环境中使用VirtualPathProvider。更糟糕的是,我使用Reflector跟踪了一些其他代码,发现对VirtualPath实用程序的一些硬代码引用还有其他依赖关系。我希望他们在发行版中修复这个问题,这样我们就可以真正测试我们的视图以及它们是如何呈现的。

票数 3
EN

Stack Overflow用户

发布于 2008-12-23 23:27:10

一种选择是在浏览器中运行单元测试。在这种情况下,我已经成功地使用了Selenium

票数 2
EN

Stack Overflow用户

发布于 2008-12-23 23:34:33

我们放弃了单元测试视图,现在正在使用WatiN浏览器测试作为我们构建的一部分。

我们还使用Resharper Solution Wide Analysis来检查是否存在编译器错误。不是完美的,但它得到了非常相似的结果。缺点- WatiN测试很慢。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/229185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档