gpt4 book ai didi

asp.net-mvc-3 - 将 T4MVC 与 MvcContrib.TestHelper AssertViewRendered 结合使用时如何测试默认 View

转载 作者:行者123 更新时间:2023-12-04 21:18:01 25 4
gpt4 key购买 nike

我在我的 ASP.NET MVC 3 项目中使用 T4MVC。我有以下基本测试:

[TestMethod]
public void IndexReturnsIndexView()
{
var controller = new HomeController();
var result = controller.Index();

result.AssertViewRendered().ForView(MVC.Home.Views.Index);
}

如果 Controller 方法返回默认 View ,则测试失败:

public virtual ActionResult Index()
{
return View();
}

给出的错误是:

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name '~/Views/Home/Index.cshtml', actual was ''

但是如果我重写 View 以指定返回哪个 viewName ,测试就会通过:

public virtual ActionResult Index()
{
return View(MVC.Home.Views.Index);
}

我尝试使用以下断言,但仍然不走运:

result.AssertViewRendered().ForView(MVC.Home.Index().GetT4MVCResult().Action);

出现以下错误:

MvcContrib.TestHelper.ActionResultAssertionException: Expected view name 'Index', actual was ''

然后我意识到我误读了断言失败,所以我将测试更改为:

result.AssertViewRendered().ForView(String.Empty);

测试通过了,但是测试本身好像没什么用。

最好我不想按名称指定所有 View ,那么我该如何测试呢?澄清一下,我使用的是 MvcContrib.Mvc3.TestHelper-ci 3.0.96.0 ,这是我今天从 NuGet 安装的。

更新

这不是问题的答案,但我已经开始执行以下操作,它作为测试用例提供了更多值(value):

using (var controller = new FeatureController(mockGateway))
{
// Act
var result = controller.Index();
var model = result.ViewData.Model as MyModel;

// Assert
Assert.IsNotNull(model, "Model is null or wrong type");
result.AssertViewRendered().WithViewData<MyModel>();

// Alternative Assert for model data
Assert.IsTrue(model.Items.Count > 0);
}

最佳答案

我将此问题留了相当长的时间,以便其他人可以选择回答。我现在将自己回答这个问题。

以下检查以确保返回的 View 包含预期的模型,以及该模型中更恰当的数据。对于有问题的 Controller ,这是一个更好的单元测试。

using (var controller = new FeatureController(mockGateway))
{
// Act
var result = controller.Index();
var model = result.ViewData.Model as MyModel;

// Assert
Assert.IsNotNull(model, "Model is null or wrong type");
result.AssertViewRendered().WithViewData<MyModel>();

// Alternative Assert for model data
Assert.IsTrue(model.Items.Count > 0);
}

关于asp.net-mvc-3 - 将 T4MVC 与 MvcContrib.TestHelper AssertViewRendered 结合使用时如何测试默认 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com