5

Mam metodę rozszerzenia dla klasy pomocnika w projekcie MVC4:Jak przetestować ModelMetadata.FromLambdaExpression w 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; 
    } 

} 

To robi coś bardzo prostego w sposób, który jest bynajmniej prosta.

Jak to najlepiej przetestować w jednostce? Byłoby lepiej, aby uniknąć szyderstwa metod statycznych lub zastrzyku zależności, ale jestem otwarty, jeśli to naprawdę jedyne sensowne podejście w tym przypadku.

Czy to tylko wadliwy projekt, który można poprawić, aby był bardziej podatny na testowanie jednostkowe?

+0

Co to jest funkcja robić? – Suhas

+0

Powoduje zwrócenie wartości właściwości identyfikowanej przez wyrażenie lambda przekazane do helpera HTML. –

+0

Jeśli wiedziałeś, że to nie jest prosty sposób, dlaczego tak się dzieje? – JustinKaz

Odpowiedz

3

Jest to rzeczywiście wadliwy projekt i prawdopodobnie jest powszechny. Prawidłowy podpis metoda wymaga kolejność parametrów być przełączane:

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

ten może być następnie wywoływana z testów jednostkowych:

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