5

Ich habe eine Erweiterungsmethode für eine Hilfsklasse in einem MVC4 Projekt:Testen von ModelMetadata.FromLambdaExpression in MVC?

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; 
    } 

} 

Dies tut etwas sehr einfach in einer Weise, die alles andere als einfach ist.

Also, wie kann dies am besten getestet werden? Es wäre vorzuziehen, statische Methoden zu vermeiden oder die Abhängigkeitsinjektion zu verwenden, aber ich bin offen dafür, wenn dies wirklich die einzigen realisierbaren Ansätze in diesem Fall sind.

Ist dies nur ein fehlerhaftes Design, das verbessert werden könnte, um besser für Komponententests geeignet zu sein?

+0

Was ist diese Funktion tun soll? – Suhas

+0

Es gibt den Wert der Eigenschaft zurück, die durch einen an einen HTML-Helper übergebenen Lambda-Ausdruck identifiziert wurde. –

+0

Wenn du wüsstest, dass es kein einfacher Weg ist, warum dann? – JustinKaz

Antwort

3

Dies ist in der Tat ein fehlerhaftes Design und ist vermutlich üblich. Die richtige Methode Unterschrift erfordert der Parameter umgeschaltet werden:

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

Dies kann dann von Unit-Tests aufgerufen werden:

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