5

Ho un metodo di estensione per una classe di supporto in un progetto MVC4:Come testare 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; 
    } 

} 

Questo fa qualcosa di molto semplice in un modo che è tutt'altro che semplice.

Quindi, come può essere sottoposto al test dell'unità? Sarebbe preferibile evitare di deridere i metodi statici o usare l'iniezione di dipendenza, ma sono di mentalità aperta se questi sono davvero gli unici approcci fattibili in questo caso.

Questo è solo un design difettoso che potrebbe essere migliorato in modo da essere più suscettibile di test dell'unità?

+0

Qual è la funzione che deve fare? – Suhas

+0

Restituisce il valore della proprietà identificata da un'espressione lambda passata in un helper html. –

+0

Se sapevi che non era un modo semplice, perché farlo in quel modo? – JustinKaz

risposta

3

Questo è davvero un disegno difettoso ed è presumibilmente comune. La firma metodo corretto richiede l'ordine dei parametri da commutare:

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

Questo può quindi essere chiamato da test di unità:

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