2009-07-09 19 views
19

प्रिंसिपलप्रमिशन एट्रिब्यूट के साथ सजाए गए यूनिट टेस्ट कोड कैसे करते हैं?एमएसटीईटी प्रिंसिपल प्रामिशन

उदाहरण के लिए, इस काम करता है:

[TestClass] 
public class UnitTest1 
{ 
    [TestInitialize] 
    public void TestInitialize() 
    { 
     AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     var c = new MyClass(); 
    } 
} 

कोई भी विचार:

class Program 
{ 
    static void Main(string[] args) 
    { 
     AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
     var c = new MyClass(); 
    } 
} 

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Users")] 
class MyClass 
{ 
    public MyClass() 
    { 
     Console.WriteLine("This works."); 
    } 
} 

यह एक SecurityException फेंकता है?

+0

दिलचस्प ... मैं एक ही भाग गया TestDriven के साथ परीक्षण और यह पारित किया। इस मामले में, परीक्षण मेरे रूप में चलाने के लिए दिखाई दिया, लेकिन जब परीक्षण सबसे पहले के साथ चलाया गया तो वर्तमान प्रिंसिपल के पास 'रिक्त' पहचान थी। क्या किसी को पता है क्यों? –

उत्तर

19

कैसे एक GenericIdentity बनाने और Thread.CurrentPrincipal के लिए संलग्न है कि अपने परीक्षण में बहुत तरह के बारे में:

[TestMethod] 
public void TestMethod1() 
{ 
    var identity = new GenericIdentity("tester"); 
    var roles = new[] { @"BUILTIN\Users" }; 
    var principal = new GenericPrincipal(identity, roles); 
    Thread.CurrentPrincipal = principal; 

    var c = new MyClass(); 
} 

एक परीक्षण असफल के लिए आप:

[TestMethod] 
[ExpectedException(typeof(SecurityException))] // Or whatever it's called in MsTest 
public void TestMethod1() 
{ 
    var identity = new GenericIdentity("tester"); 
    var roles = new[] { @"BUILTIN\NotUsers" }; 
    var principal = new GenericPrincipal(identity, roles); 
    Thread.CurrentPrincipal = principal; 

    var c = new MyClass(); 
} 
+0

यह काम किया, रे, धन्यवाद! लेकिन नकली के लिए यह बहुत आसान लग रहा था। क्या कोई भी आवश्यकता भूमिका निभाने का दावा नहीं कर सकता? –

+0

कूल! मदद करने में खुशी! पूर्ण ट्रस्ट सेटिंग में यह इतना आसान है। थ्रेड सेट करना। वर्तमान प्रिंसिपल को विशेष निजीकरण की आवश्यकता होती है, विशेष रूप से, आपको सुरक्षा सुरक्षा की सुरक्षा सुरक्षा की आवश्यकता होती है। Flag.ControlPrincipal। कीथ ब्राउन की पुस्तक ऑनलाइन देखें: http://alt.pluralsight.com/wiki/default.aspx/Keith.GuideBook/WhatIsThreadDotCurrentPrincipal.html –

+0

बहुत ही रोचक लेख! लेकिन मेरे पास मौजूदा प्रिंसिपल को बदलने के लिए सुरक्षा अनुमति है या नहीं, मेरे पास जानने या नियंत्रित करने का कोई तरीका नहीं है। सौभाग्य से, मेरा आवेदन एक डब्ल्यूसीएफ सेवा है जिसे मैं अनुमान लगा रहा हूं (और उम्मीद कर रहा हूं), टाइमर और थैड पूल की तरह, वर्तमान प्रिंसिपल का प्रचार नहीं करेगा। –

1

आप परीक्षण विधि के भीतर impersonating विभिन्न उपयोगकर्ताओं को आजमा सकते हैं, यदि आप एक व्यवस्थापक के रूप में कोड चलाते हैं तो आप परीक्षण (या टेस्ट क्लास) के अंदर एक स्थानीय उपयोगकर्ता खाता बना सकते हैं और अंत में इसे हटा सकते हैं।

संपादित करें: क्षमा करें, मैंने एक विफलता मामले का परीक्षण करने के लिए प्रतिरूपण का उपयोग करके कल्पना की - मुझे आपके प्रश्न को ठीक से पढ़ना चाहिए था :) मेरे पास समान यूनिट परीक्षण हैं, और वे mstest के भीतर स्थानीय खाते बनाने में सक्षम हैं। चाहे यह अच्छा अभ्यास है, एक और मामला है।

मुझे लगता है कि आप पहले ही this पृष्ठ के रूप में देख चुके हैं: ऐप डोमेन की मुख्य नीति "विंडोज प्रिंसिपल" पर सेट करें। मेरे लिए, Thread.CurrentPrincipal.Identity.Name मेरा उपयोगकर्ता नाम देता है और परीक्षण वीएस 2005 और वीएस 2008 लक्ष्यीकरण .NET 2.0, 3.0 & 3.5 का उपयोग करके पास करता है।

क्या आप यूएसी और गैर उन्नत वीएस के साथ Vista/Win7 पर चल रहे हैं? अन्यथा क्या आप किसी अन्य समूह का उपयोग करके, किसी अन्य समूह का उपयोग करके या अपनी मशीन पर एक और स्थानीय व्यवस्थापक खाता बनाकर और इस उपयोगकर्ता के रूप में परीक्षण चलाने के लिए सक्षम हैं?

+0

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

+0

मैं व्यवस्थापक के रूप में एक्सपी पर वीएस चला रहा हूँ। रे के सुझाव ने काम किया, लेकिन मुझे अन्य सुरक्षा चिंताओं के साथ छोड़ दिया। उन टिप्पणियों को देखें जिन्हें मैंने रे छोड़ा था। –

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