断言返回类型的MVC控制器动作

时间:2010-09-27 14:45:24

标签: asp.net-mvc unit-testing

如何在System.RuntimeType中包装时声明返回预期类型?

作为更大单元测试的一部分,用于验证操作是否具有正确的参数和已分配的操作过滤器,我正在针对填充的MethodInfo实例进行断言。当我断言“action.ReturnParameter”时,它失败了,因为它说类型是System.RunTimeType。虽然我知道这是一个围绕期望类型的包装器,但我似乎无法找到断言包装实例是预期类型的​​方法 - 到目前为止我提出的最好的方法是断言反对姓名或全名,但这很糟糕,因为它只是使用“魔术字符串”。

有人可以帮忙吗?由于我的谷歌搜索没有发现任何有用的东西,我猜它有一个非常简单的解决方案,我只是没有看到它。

代码如下:

[TestMethod]
public void CheckActionFilterSet()
{
    MethodInfo action = new CustomerController((new MockHttpContext()).Object)
                                .GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance)
                                .Where(mi => mi.Name.Equals("Search")).First();
    Assert.That(action.ReturnParameter.ParameterType, Is.InstanceOf(typeof(ViewResult)), "View Result should be of expected type");
}

异常消息是:

  

查看结果应为预期类型

     

预期:

的实例      

< System.Web.Mvc.ViewResult>

     

但是:

     

< System.RuntimeType>

1 个答案:

答案 0 :(得分:3)

只需调用控制器方法并检查返回的对象的类型:

var result = new CustomerController((new MockHttpContext()).Object).Search(....);

Assert.That(result, Is.InstanceOf(typeof(ViewResult)), "View Result should be of expected type");

如果您想要...还可以检查ViewData / model的值。