2012-02-12 46 views
1

我剛開始學習asp.net mvc,其中一個原因主要原因是遷移到TDD。如何對測試視圖進行單元/集成以檢測突發更改

我正在寫一個有報告的小型儀表板應用程序。在這個應用程序中,我有一個名爲ReportsController的主控制器,它現在只有一個方法,GetReport接受查詢並在查詢滿足特定條件時返回視圖,否則返回錯誤消息。

[HttpGet] 
public ActionResult GetReport(string query) 
{  
    //calls the QueueRep and gets back DataTable 
    ReportQuery reportQuery = new ReportQuery(query); 
    if (reportQuery.IsValidQuery) 
    { 
     queryRepository.ExecuteReportQuery(ref reportQuery);     
    } 
    else 
    { 
     return View("Error"); 
    }   
    ViewData.Add("ResultDataTable",reportQuery.ResultDataTable); 

    return View(); 

}

我寫了2個單元測試具體步驟如下

public void GetReport_Should_Return_Error_View_For_Malicious_Query() 
{ 
    //Arrange 
    string query = "drop table userInfo"; 
    var controller = CreateReportsController(query); 

    //Act 
    var result = controller.GetReport(query) as ViewResult; 

    //Assert 
    Assert.AreEqual(result.ViewName, "Error"); 

} 

[Test] 
public void GetReport_Should_Return_View_With_DataTable_For_Correct_Query() 
{ 
    //Arrange 
    StringBuilder sb = new StringBuilder(); 

    sb.Append("SELECT Year(CreatedOn) as Year, Month(CreatedOn) as Month, Count(CREATEDON) as NewEmployers"); 
    sb.Append("FROM dbo.UserInfo WHERE DefaultPurpose = 1 GROUP BY Year(CreatedOn), Month(CreatedOn)"); 

    string query = sb.ToString(); 

    var controller = CreateReportsController(query); 

    //Act 

    var result = controller.GetReport(query) as ViewResult; 

    //Assert 

    Assert.IsTrue(result.ViewData.ContainsKey("ResultDataTable")); 
    Assert.IsTrue(result.ViewData["ResultDataTable"].GetType() == typeof(System.Data.DataTable)); 

} 

現在,由於與SSRS,服務器衝突/報告指着SSRS,而不是報告控制器,以便我將ReportsController的名稱更改爲MyReportsController。我使用重構進行名稱更改,並在測試項目中更改我的單元測試,並運行單元測試。一切安好。

但是現在當我運行實際的應用程序時,出現錯誤。基本上,必須將視圖的文件夾名稱從「報告」更改爲「MyReports」。我如何測試這些場景。僅使用硒等功能測試工具?或者我可以用不同的方式寫我的測試?

回答

1

是,手動測試或功能測試工具(如Selenium)是找到這些重大變化的唯一方法。

原因是因爲在單元測試中,您只是測試代碼的小小部分。所以測試一個控制器的動作方法非常棒!在那個測試中,你需要記住你測試自己的代碼而不是asp.net和/或mvc框架。現在,爲了渲染視圖結果,這是在你的動作方法之外處理的。其次,我們假設渲染邏輯(如何渲染)已經由微軟測試過,所以我們不想浪費時間測試。

所以這意味着我們需要在單個測試中將獨立模塊連接在一起。當我們有2+模塊或區域等進行測試時,我們突然跳出單元測試並進入手動或功能測試。

相關問題