代码之家  ›  专栏  ›  技术社区  ›  Paul Hadfield

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

  •  2
  • Paul Hadfield  · 技术社区  · 14 年前

    当一个期望的类型被包装在一个System.RuntimeType?

    作为一个更大的单元测试的一部分,为了验证一个操作是否分配了正确的参数和操作过滤器,我针对一个已填充的MethodInfo实例进行断言。当我反对action.return参数“它失败了,因为它说的类型是系统运行时类型. 虽然我知道这是一个围绕预期类型的包装器,但我似乎找不到一种方法来断言包装的实例是预期类型的—到目前为止,我提出的最好的方法是针对名称或全名进行断言,但这太可怕了,因为它只是使用“魔法字符串”。

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

    [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");
    }
    

    视图结果应为预期类型

    <系统.Web.Mvc.ViewResult>

    但当时是:

    <

    1 回复  |  直到 4 年前
        1
  •  3
  •   Jakub Konecki    14 年前

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

    var result = new CustomerController((new MockHttpContext()).Object).Search(....);
    
    Assert.That(result, Is.InstanceOf(typeof(ViewResult)), "View Result should be of expected type");
    

    如果您想。。。