2012-07-09 10 views
7

का उपयोग करके मजाक कर रहा है हाय मैं अपने एएसपी.NET MVC2 प्रोजेक्ट पर कुछ यूनिट परीक्षण कर रहा हूं। मैं Moq ढांचे का उपयोग कर रहा हूँ। मेरी LogOnController,फॉर्म प्रमाणीकरण। SetAuthCookie मॉक

[HttpPost] 
public ActionResult LogOn(LogOnModel model, string returnUrl = "") 
{ 
    FormsAuthenticationService FormsService = new FormsAuthenticationService(); 
    FormsService.SignIn(model.UserName, model.RememberMe); 

} 

FormAuthenticationService कक्षा में, में

public class FormsAuthenticationService : IFormsAuthenticationService 
    { 
     public virtual void SignIn(string userName, bool createPersistentCookie) 
     { 
      if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot  be null or empty.", "userName"); 
      FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
     } 
     public void SignOut() 
     { 
      FormsAuthentication.SignOut(); 
     } 
    } 

मेरे समस्या मैं कैसे

FormsService.SignIn(model.UserName, model.RememberMe); 

इस लाइन को क्रियान्वित करने से बचने कर सकते हैं। या वहां बिना Moq ढांचे उपयोग करते हुए मेरे ASP.Net MVC2 परियोजना को बदलने

FormsService.SignIn(model.UserName, model.RememberMe); 

MOQ के लिए किसी भी तरह से है।

+0

एसयूटी (टेस्ट अंडर टेस्ट) - 'लॉगऑन कंट्रोलर' या 'फॉर्म प्रमाणीकरण सेवा' क्या है? यदि यह पूर्व है, तो 'फॉर्म प्रमाणीकरण सेवा' के लिए नकली आपूर्ति की जानी चाहिए और आपको यह सत्यापित करना चाहिए कि उस पर 'साइनइन' विधि' कहा जाता है। उत्तरार्द्ध इकाई परीक्षण के लिए कठिन है क्योंकि इसे एक मौजूदा 'HttpContext' की आवश्यकता होती है जिसमें कुकी जोड़ने के लिए (' HttpResponse')। –

+0

मैं LogOnController का परीक्षण करना चाहता हूं। मैंने FormsService नकल करने की कोशिश की। साइनइन (model.UserName, model.RememberMe); इस तरह से , var formService = नया मॉक <फॉर्म प्रमाणीकरण सेवा>(); लेकिन formervice.SignIn कुछ भी वापस नहीं करता है। मैं उस पंक्ति को निष्पादित करने से कैसे बच सकता हूं या उस पंक्ति को कैसे नकल कर सकता हूं। मुझे नहीं पता कि मोक का उपयोग करके मॉक कैसे करें। – Dilma

उत्तर

9

इंजेक्षन IFormsAuthenticationService इस

private IFormsAuthenticationService formsAuthenticationService; 
public LogOnController() : this(new FormsAuthenticationService()) 
{ 
} 

public LogOnController(IFormsAuthenticationService formsAuthenticationService) : this(new FormsAuthenticationService()) 
{ 
    this.formsAuthenticationService = formsAuthenticationService; 
} 

पहले निर्माता ढांचा इतना है कि IFormsAuthenticationService का सही उदाहरण कार्यावधि में प्रयोग किया जाता है के लिए है की तरह अपने LogOnController करने के लिए एक निर्भरता के रूप में।

अब आप अपने परीक्षण में नीचे के रूप में

var mockformsAuthenticationService = new Mock<IFormsAuthenticationService>(); 
//Setup your mock here 

के रूप में नीचे

[HttpPost] 
public ActionResult LogOn(LogOnModel model, string returnUrl = "") 
{ 
    formsAuthenticationService.SignIn(model.UserName, model.RememberMe); 
} 

आशा यह निजी क्षेत्र formsAuthenticationService उपयोग करने के लिए अपनी कार्रवाई कोड बदले नकली पास करके अन्य निर्माता का उपयोग कर LogonController का एक उदाहरण बनाने मदद करता है. मैंने आपके लिए नकली सेटअप छोड़ा है। अगर आपको यकीन नहीं है कि इसे कैसे सेट अप किया जाए तो मुझे बताएं।

+0

धन्यवाद सुहास। मुझे नहीं पता कि यह कोड कहां रखा जाए क्योंकि मैं एएसपी.Net u = यूनिट परीक्षण में नया हूं। क्या आपका मतलब है कि मुझे एमवीसी प्रोजेक्ट में अपना लॉगऑन कंट्रोलर बदलना चाहिए? व्याख्या करने के लिए कृपया बहुत दयालु रहें। अग्रिम में धन्यवाद। – Dilma

+0

धन्यवाद .. यह काम करता है .. धन्यवाद सुहास। – Dilma

+0

मुझे उम्मीद है कि यह अब आपको स्पष्ट है। अगर आपको अभी भी इसके साथ समस्याएं आती हैं तो मुझे बताएं। – Suhas

संबंधित मुद्दे