2008-11-17 19 views
5

मैं इकाई परीक्षण करने के लिए अपने ASP.NET MVC आवेदन पत्र में एक पेज कोशिश कर रहा हूँ कि, करने के लिए, किसी उपयोगकर्ता के मद को नष्ट करेगा तैनात जब। मैं इस पृष्ठ को प्रतिबंधित करना चाहता हूं ताकि इसे केवल उस आइटम के मालिक द्वारा पोस्ट किया जा सके। मूल रूप से, मैं केवल नियंत्रक में एक त्वरित जांच करना चाहता था जिसने जांच की कि HttpContext.Current.User.Identity.Name आइटम के मालिक के बराबर है, लेकिन मुझे जल्दी से एहसास हुआ कि इकाई परीक्षण यह मुश्किल होगा।आप ASP.NET MVC में User.Identity.Name को कैसे रोकते हैं?

मैं एक अंतरफलक है कि वर्तमान में लॉग-इन उपयोगकर्ता के नाम का उपयोग करने के लिए एक तरीका प्रदान करता है बनाना चाहिए?

उत्तर

4

अपने प्रश्न की अंतिम पंक्ति शायद तेज समाधान है, हालांकि, मैं नहीं आप इंटरफ़ेस बनाने की जरूरत है, HttpContext.Current.User पहले से ही एक IPrincipal है और HttpContext.Current.User.Identity पहले से ही एक IIdentity है लगता है।

अपने चेकिंग तर्क उन इंटरफेस की या तो उपयोग करता है, नियंत्रक एक IIdentity कि आप HttpContext.Current.User.Identity

आशा है कि मदद करता है के बजाय बनाने के पारित करने के लिए मज़ाक उड़ाया जा सकता है!

2

मैं Thread.CurrentPrincipal.Identity.Name का उपयोग करें। यूनिट टेस्ट के लिए जेनेरिक प्रिंसिपल बनाने और इसे संलग्न करने के लिए यह छोटा है।

5

आप इस कोड

Controller CreateControllerAs(string userName) { 

    var mock = new Mock<ControllerContext>(); 
    mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName); 
    mock.SetupGet(p => p.HttpContext.Request.IsAuthenticated).Returns(true); 

    var controller = new SomeController(); 
    controller.ControllerContext = mock.Object; 

    return controller; 
} 

यह moq lib

+0

का उपयोग करता है का उपयोग कर सकते तुम्हें पता है, जहां मैं नकली वर्ग पा सकते हैं? मैंने एमएसडीएन के बारे में दस्तावेज ढूंढने की कोशिश की है लेकिन मैंने कोई प्रगति नहीं की है। –

+1

https://code.google.com/p/moq/ यह lib यहां उपयोग किया जाता है – Sly