【发布时间】:2012-02-12 14:38:50
【问题描述】:
我刚刚开始学习 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。我使用重构来更改名称,并在测试项目中更改了我的单元测试并运行了单元测试。一切都很好。
但是现在当我运行实际应用程序时,我得到了一个错误。基本上,视图的文件夹名称必须从 Reports 更改为 MyReports。我该如何测试这些场景。是否只使用 selenium 之类的功能测试工具?或者我可以用不同的方式编写测试?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 unit-testing tdd automated-tests