2008-10-28 21 views
7

मैं यूनिट को उस कोड के टुकड़े का परीक्षण करने की कोशिश कर रहा हूं जिसके लिए परीक्षण में वर्तमान में लॉग इन उपयोगकर्ता की आवश्यकता है। .NET 2.0 सदस्यता प्रदाता का उपयोग करके, मैं इस परीक्षण के लिए उपयोगकर्ता के रूप में प्रोग्रामेटिक रूप से लॉग इन कैसे कर सकता हूं?.net सदस्यता प्रदाता के साथ प्रोग्रामेटिक लॉगिन

उत्तर

1

क्या आपके कोड को वास्तव में ASP.NET के माध्यम से लॉग इन किए गए उपयोगकर्ता की आवश्यकता है, या क्या इसे केवल वर्तमान प्रिंसिपलर की आवश्यकता है? मुझे नहीं लगता कि आपको अपनी साइट पर प्रोग्रामेटिक रूप से लॉग इन करने की आवश्यकता है। आप GenericPrincipal बना सकते हैं, अपनी आवश्यक गुणों को सेट कर सकते हैं, और इसे संलग्न कर सकते हैं, उदाहरण के लिए थ्रेड। कंटेंट प्रिंसिपल या मॉक किए गए एचटीपी कॉन्टेक्स्ट। यदि आपके कोड को वास्तव में रोलप्रिंसिपल या कुछ चाहिए तो मैं कोड को एएसपी.NET सदस्यता के साथ कम करने के लिए बदल दूंगा।

+0

मैं Membership.GetUser करने के लिए कॉल की जरूरत है() उपयोगकर्ता में वापस जाने के लिए वर्तमान में लॉग। – ddc0660

+2

सदस्यता के तहत कक्षा में सीधे सदस्यता प्राप्त करें। गेटयूसर()। निर्माण में IGetUser के साथ कक्षा की आपूर्ति करें, सदस्यता.GetUser() के स्थान पर इसका उपयोग करें, फिर परीक्षण के लिए IGetUser का नकली कार्यान्वयन करें। –

0

अपने सदस्यता प्रदाता का उपयोग करके आप सदस्यता का उपयोग कर उपयोगकर्ता को सत्यापित कर सकते हैं। ValidateUser। फिर आप FormsAuthentication.SetAuthCookie का उपयोग कर प्रमाणीकरण कुकी सेट कर सकते हैं। जब तक आपके पास कुकी कंटेनर हो, तब तक आपको किसी उपयोगकर्ता में लॉग इन करने की अनुमति देनी चाहिए।

2

मुझे एक डिस्पोजेबल क्लास बनाने के लिए सबसे सुविधाजनक पाया गया है जो Thread.CurrentPrincipal को सेटिंग और रीसेट करने में संभालता है।

public class TemporaryPrincipal : IDisposable { 
     private readonly IPrincipal _cache; 

     public TemporaryPrincipal(IPrincipal tempPrincipal) { 
      _cache = Thread.CurrentPrincipal; 
      Thread.CurrentPrincipal = tempPrincipal; 
     } 

     public void Dispose() { 
      Thread.CurrentPrincipal = _cache; 
     } 
    } 

परीक्षा पद्धति में आप सिर्फ इस तरह एक का उपयोग कर बयान के साथ अपने कॉल लपेट:

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) { 
    ClassUnderTest.MethodUnderTest(); 
} 
संबंधित मुद्दे