5

मैं एक MVC4 परियोजना में एक सहायक वर्ग के लिए एक विस्तार विधि है:एमवीसी में ModelMetadata.FromLambdaExpression का परीक्षण कैसे करें?

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

} 

यह एक तरीके से बहुत ही सरल कुछ है कि लेकिन सरल कुछ भी है नहीं करता है।

तो, यह सर्वोत्तम परीक्षण कैसे किया जा सकता है? स्थैतिक तरीकों का मजाक करने या निर्भरता इंजेक्शन का उपयोग करने से बचने के लिए बेहतर होगा, लेकिन अगर मैं वास्तव में इस मामले में एकमात्र व्यवहार्य दृष्टिकोण हैं तो मैं खुले दिमाग में हूं।

क्या यह सिर्फ एक दोषपूर्ण डिज़ाइन है जिसे बेहतर किया जा सकता है ताकि यूनिट परीक्षण के लिए अधिक सक्षम हो सके?

+0

क्या इस समारोह करने के लिए माना जाता है? – Suhas

+0

यह एक HTML सहायक में पारित लैम्ब्डा अभिव्यक्ति द्वारा पहचाने गए संपत्ति का मूल्य देता है। –

+0

यदि आपको पता था कि यह एक आसान तरीका नहीं था, तो ऐसा क्यों करें? – JustinKaz

उत्तर

3

यह वास्तव में एक दोषपूर्ण डिजाइन है और संभवतः आम है। सही विधि हस्ताक्षर की आवश्यकता है पैरामीटर के क्रम स्विच होने के लिए:

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)); 
संबंधित मुद्दे