2010-07-08 89 views
1

嗨我做TDD的一个asp.net mvc项目,我需要能够做到端到端测试发送一个请求到控制器的行动一直到版本库。我曾尝试使用the code here,但不幸的是我无法运行,并且我耗尽时间,有没有人知道任何其他方式来伪造http请求并在测试场景中填充请求发布参数?asp.net mvc集成测试

我控制器操作如下:

[HttpPost] 
public ActionResult CreateUser(User user) 
{ 
} 

所以我需要基本上做一个HTTP请求来填充这个User对象,并希望将其保存到一个测试版本库。

+0

嗨,大家好,我设法让史蒂夫·桑德森的集成测试框架和运行。我不得不修改源代码,因为它与我的项目中的一些dll存在问题,并且不断出现异常,但它现在很好,并且是一个集成测试的优秀工具 – Matthew 2010-07-12 10:39:25

回答

5

当你发布的链接我要史蒂夫·桑德森的博客摘录:

集成测试测试整个软件堆栈一起工作。这些测试不会嘲笑或伪造任何东西(它们使用真实的数据库和真实的网络连接),并善于发现您的单元测试组件是否不像您期望的那样一起工作。一般来说,最好将大部分精力放在构建一套完整的单元测试,然后为每个主要功能添加一些集成测试,以便您可以在客户执行之前检测到任何灾难性的不兼容性或配置错误。

在这个阶段,您不应该伪造HTTP请求,因为集成测试会一并测试每个组件。

尝试某种类型的浏览器自动化框架的:

0

如果你想要做的完全集成测试,然后从用户的前瞻性测试应用程序。创建测试用例,如:作为admin

  • 转到用户页面

    1. 登录
    2. 添加用户名称为“用户1”
    3. 检查名称为“用户1”,在用户网列出的用户。

    并使用Selenium或Watin自动执行此类测试。见示例here

  • 0

    您可能还想看看Verde框架。在语义上,测试看起来与Steve Sanderson的MvcIntegrationTestFramework类似,主要区别在于Verde在实际IIS AppDomain的上下文中执行测试(通过基于浏览器的测试运行器),而不是通过程序创建的测试。这提供了一些优点:首先它是对实际应用程序配置,网络拓扑结构,安全设置等的更真实的仿真。其次,您可以将测试作为后期部署步骤自动运行,或者甚至可以自动运行测试生产中应用程序监视的一部分。下面是包含在GitHub上的源代码MvcMusicStore取试样为例佛得角测试:

    [IntegrationTest] 
    public void Index_Load_ExpectedHtml() 
    { 
        // Get a product to load the details page for. 
        var album = storeDB.Albums 
        .Take(1) 
        .First(); 
    
        using (var scope = new MvcExecutorScope("Store/Details/" + album.AlbumId)) 
        { 
        Assert.AreEqual(200, scope.HttpContext.Response.StatusCode); 
        Assert.IsTrue(scope.Controller is StoreController); 
        Assert.AreEqual("Details", scope.Action); 
    
        var model = scope.Controller.ViewData.Model as Album; 
        Assert.IsNotNull(model); 
        Assert.AreEqual(album.AlbumId, model.AlbumId); 
    
        Assert.IsFalse(String.IsNullOrEmpty(scope.ResponseText)); 
    
        // Load the ResponseText into an HtmlDocument 
        var html = new HtmlDocument(); 
        html.LoadHtml(scope.ResponseText); 
    
        // Use ScrappySharp CSS selector to make assertions about the rendered HTML 
        Assert.AreEqual(album.Title, html.DocumentNode.CssSelect("#main h2").First().InnerText); 
        } 
    } 
    

    有一个NuGet包,这使得它很容易添加到您的MVC项目。