【问题标题】:How to test ModelMetadata.FromLambdaExpression in MVC?如何在 MVC 中测试 ModelMetadata.FromLambdaExpression?
【发布时间】:2012-11-21 15:03:35
【问题描述】:

我在一个 MVC4 项目中有一个辅助类的扩展方法:

public static class ExtensionMethods
{

    public static object Value<TModel, TProperty>(this Expression<Func<TModel, TProperty>> expression, ViewDataDictionary<TModel> viewData)
    {
        return ModelMetadata.FromLambdaExpression(expression, viewData).Model;
    }

}

这以绝非简单的方式完成了一些非常简单的事情。

那么,如何才能最好地进行单元测试呢?最好避免模拟静态方法或使用依赖注入,但如果这些真的是这种情况下唯一可行的方法,我持开放态度。

这只是一个有缺陷的设计,可以改进以便更适合单元测试吗?

【问题讨论】:

  • 这个函数应该做什么?
  • 它返回由传递给 html 帮助器的 lambda 表达式标识的属性的值。
  • 如果你知道这不是一个简单的方法,为什么要这样做?
  • 你有什么更简单的解决方案?

标签: asp.net-mvc unit-testing c#-4.0 asp.net-mvc-4 extension-methods


【解决方案1】:

这确实是一个有缺陷的设计,并且可能很常见。正确的方法签名需要切换参数顺序:

public static object Value<TModel, TProperty>(this ViewDataDictionary<TModel> viewData, Expression<Func<TModel, TProperty>> expression)
{
    return ModelMetadata.FromLambdaExpression(expression, viewData).Model;
}

然后可以从单元测试中调用它:

Expression<Func<Model, string>> expression = (t => t.PropertyName);
ExtensionMethods.Value<Model, string>(viewData, expression));

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2010-09-09
    • 2019-03-25
    • 1970-01-01
    • 2016-11-27
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多