在Asp.net MVC 4.5中,使用Microsoft.VisualStudio.TestTools.UnitTesting
。
有没有办法真正对ActionResult
进行单元测试?我见过的所有文档只测试视图名称!
Assert.AreEqual("Action Method", result.ViewName);
好吧,我想要一个真正的考验。如何测试控制器动作的响应?
答案 0 :(得分:0)
根据以下内容给出一些基本内容:
public ActionResult Display(string productCode)
{
var model = new ProductModel(productCode);
if (model.NotFound)
{
return this.RedirectToRoute("NotFound");
}
return this.View("Product", model);
}
而不是像Assert.AreEqual("Action Method", result.ViewName);
那样断言的东西(可以是有效的测试。
你有很多选择,包括......
查看模型类型
[TestMethod]
public void Display_WhenPassedValidProductCode_CreatesModel()
{
using (var controller = this.CreateController())
{
// Arrange Mocks on controller, e.g. a Service or Repository
// Act
var result = controller.Display(string.Empty) as ViewResult;
var model = (ProductModel)result.Model;
Assert.IsInstanceOfType(model, typeof(ProductModel));
}
}
查看模型人口流程
[TestMethod]
public void Display_WhenPassedValidProductCode_PopulatesModel()
{
using (var controller = this.CreateController())
{
const string ProductCode = "123465";
// Arrange Mocks on controller, e.g. a Service or Repository
// Act
var result = controller.Display(ProductCode) as ViewResult;
var model = (ProductModel)result.Model;
Assert.AreEqual(ProductCode, model.ProductCode);
}
}
查看行动结果的类型
[TestMethod]
public void Display_WhenNotFound_Redirects()
{
using (var controller = this.CreateController())
{
const string ProductCode = "789000";
// Arrange Mocks on controller, e.g. a Service or Repository
// Act
var result = controller.Display(ProductCode) as RedirectToRouteResult;
Assert.IsNotNull(result); // An "as" cast will be null if the type does not match
}
}
基本上你可以测试几乎任何东西,在你的代码库上选择一个例子并尝试测试它。如果你陷入困境,可以构建一个体面的问题并在此处发布。