2009-01-30 9 views
5

मैं अब कुछ समय के लिए मेरे डोमेन वस्तुओं के लिए परीक्षण लेखन किया गया है, लेकिन मैं अभी भी काफी यकीन है कि अपने वेब परियोजना में सुरक्षा के लिए परीक्षण के बारे में जाने के लिए कैसे नहीं हूँ। कुछ वातावरण में कुछ उपयोगकर्ता मेरे मॉडल आदि के कुछ गुणों तक पहुंच सकते हैं, लेकिन आप इसका परीक्षण कैसे करेंगे? अभी, मैं इसे वर्तमान प्रमाणीकृत उपयोगकर्ता पर आधारित कर रहा हूं, लेकिन मैं नकली प्रमाणीकरण प्रदाता को इंजेक्शन देने के बारे में कैसे जाउंगा?उपयोगकर्ता आधारित सुरक्षा के लिए आप अपने एएसपी एमवीसी ऐप्स का परीक्षण कैसे करते हैं?

यह शायद एक गूंगा सवाल है, लेकिन अगर किसी को भी मदद कर सकते हैं मुझे परीक्षण अंधकार युग से बाहर निकलने के लिए, यह बहुत सराहना की जाएगी।

+0

डुप्लिकेट: http://stackoverflow.com/questions/243851/programmatic-login-with-net-membership -provider not.that.dave.foley के समाधान आप के लिए काम करेंगे। –

+0

http://stackoverflow.com/questions/243851/programmatic-login-with-net-membership-provider – ajma

उत्तर

8

देना लिंक एक तरीका है कि है, लेकिन इसका इस्तेमाल करने की बेहतर होता है एक नकली: Xania.AspNet.Simulator

Mock<ControllerContext> MockContext(string userName) 
    { 
     var mockContext = new Mock<ControllerContext>(); 
     // mock an authenticated user 
     mockContext.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(userName); 
     mockContext.SetupGet(p => p.HttpContext.User.Identity.IsAuthenticated).Returns(true); 
     return mockContext; 
    } 

    [TestMethod] 
    public void DinnersController_Delete_Should_Fail_With_InvalidOwner_Given_Wrong_User() 
    { 
     //set by default 
     var mockContext = MockContext("scottha"); 

     // mock an authenticated user 
     _dinnerController.ControllerContext = mockContext.Object; 

     ViewResult result = _dinnerController.Delete(1, "") as ViewResult; 
     Assert.AreEqual("InvalidOwner", result.ViewName); 
    } 
0

तो TDD का उपयोग कर अपने परीक्षण केवल विचाराधीन कोड का परीक्षण करना चाहिए, अन्य सभी संबद्ध वस्तुओं mocks होना चाहिए/नकली

अन्य लोगों के अलावा

, आप एक नकली सुरक्षा प्रदाता है कि उपयोगकर्ता मामलों आप करने की आवश्यकता है अनुकरण कर सकते हैं की आवश्यकता होगी परीक्षण (अतिथि, उपयोगकर्ता 1, उपयोगकर्ता 2, व्यवस्थापक आदि)

जब आप वर्तमान एमवीसी आरसी के साथ एक खाली एमवीसी परियोजना बनाते हैं तो आपको नकली सुरक्षा प्रदाताओं (सदस्यता/भूमिका आदि) के साथ एक बुनियादी परीक्षण ढांचा मिलता है। वे कुछ Fleshing बाहर की जरूरत है, लेकिन मूल डिजाइन

0

वहाँ एक तीसरा विकल्प यह है कि उपयोग कर रहा है

पहले नियंत्रक कार्रवाई

// arrange 
var controllerAction = new AccountController().Action(c => c.ChangePassword()) 
    .Authenticate(<username>, <roles>); 

अगले तैयार आप अपने क्रियान्वयन के आधार पर दो विकल्प हैं,

पहले परिदृश्य, आप एक HttpUnauthorizedResult वापसी करता है, तो है, यानी जब अधिकृत विशेषता का उपयोग या जब आप अपने नियंत्रक के AuthorizeCore ओवरराइड, तो आप तो वह ऐसा परीक्षण कर सकते हैं, जिस स्थिति में वास्तविक कार्रवाई विधि लागू नहीं है।

// act, assert 
controllerAction.Authorize().Should().BeNull(); 

दूसरा परिदृश्य है जब आप वास्तव में कार्रवाई विधि के अंदर उपयोगकर्ता सत्यापित करें:

// act 
var result = controllerAction.Execute(); 
// assert 
result.ActionResult.Should().NotBeOfType<HttpUnauthorizedResult>(); 
संबंधित मुद्दे