如何检查一个动作对View()的调用没有抛出异常?

gin*_*boy 5 c# unit-testing rhino-mocks asp.net-mvc-3

如果我们点击SomeController.SomeAction()但找不到文件SomeAction.cshtml,我们会收到System.InvalidOperationException和输出错误消息......

未找到视图"SomeAction"或其主节点,或者视图引擎不支持搜索的位置.搜索了以下位置:......等

但是,即使丢失了此文件,下面的测试也会在ViewResult仍然被返回时传递.

检查操作调用的最佳方法是什么,View()没有抛出异常并在ViewResult内容中悄悄地返回此内容?


public class SomeController: Controller
{
    public ActionResult SomeAction()
    {
        var viewModel = new SomeModel();
        return View(viewModel);
    }
}
Run Code Online (Sandbox Code Playgroud)
[Test]
public void TestIndex(Type clientType)
{
    var controller = new SomeController();
    var result = (ViewResult)controller.SomeAction();

    Assert.That(result, Is.TypeOf<ViewResult>());
}
Run Code Online (Sandbox Code Playgroud)

注意:这是一个更大问题的一个简单示例,此时有充分的理由进行此类测试,但这不是讨论的论坛.

Str*_*ior 1

通常,确保视图代码执行时没有错误是 UI 测试的责任,而不是单元测试的责任。不过,您可以尝试使用FindView方法。您只需要模拟一个 ControllerContext 来模仿您假装执行的 Http 请求。

您可能还对最新版本的 Resharper 感兴趣,它非常擅长在控制器代码引用不存在的视图时向您发出警报。