11

मैं कुछ ASP.NET MVC नियंत्रक कोड यदि कोई उपयोगकर्ता प्रमाणीकृत किया जाता है और यदि हां, तो यह अगर यह एक विशिष्ट दावा है देखने के लिए जाँच करता है की जाँच करता है कि मिल गया है। ठीक काम करता है।क्या कोई तरीका है कि मैं अपने एएसपी.नेट एमवीसी वेब एप्लिकेशन में दावा प्रिंसिपल का नकल कर सकता हूं?

मुझे कुछ यूनिट परीक्षण मिल गए हैं और मुझे IPrincipal (जो करना आसान है) का नकल करने की आवश्यकता है ... लेकिन मुझे यकीन नहीं है कि दावों की जांच कैसे करें! मैं आमतौर पर

public static ClaimsPrincipal ClaimsPrincipal(this Controller controller) 
{ 
    return controller.User as ClaimsPrincipal; 
} 

और कुछ नियंत्रक कोड की तरह कुछ .. कर ...

this.ClaimsPrincipal().HasClaim(x => x.......); 

लेकिन यह सब विफल रहता है, जब मैं अपने यूनिट टेस्ट में यह परीक्षण क्योंकि मुझे यकीन है कि नहीं कर रहा हूँ कि कैसे मैं कर सकते हैं mockClaimsPrincipal

कोई भी विचार?

उत्तर

3

इसके अलावा तरीकों में से सबसे इतना आभासी हैं उन नकली में सक्षम हैं।

6

मुझे यकीन नहीं है कि "मॉक" के साथ आपका क्या मतलब है। लेकिन आप स्क्रैच से केवल दावा प्रिंसिपल बना सकते हैं। पहले दावा करें Identity - आपको आवश्यक दावों और प्रमाणीकरण विधि जोड़ें। फिर इसे दावे प्रिंसिपल के साथ लपेटें।

10

ClaimsPrincipal मजाक भी मुश्किल

var cp = new Mock<ClaimsPrincipal>(); 
cp.Setup(m => m.HasClaim(It.IsAny<string>(),It.IsAny<string>())) 
    .Returns(true); 

हालांकि कैसे अपने नियंत्रक एक्सेस का लाभ लेने के आधार पर कहीं भी होगी करने के लिए नहीं है।

var cp = new Mock<ClaimsPrincipal>(); 
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

var sut = new UtilityController(); 

var contextMock = new Mock<HttpContextBase>(); 
contextMock.Setup(ctx => ctx.User).Returns(cp.Object); 

var controllerContextMock = new Mock<ControllerContext>(); 
controllerContextMock.Setup(con => con.HttpContext).Returns(contextMock.Object); 

sut.ControllerContext = controllerContextMock.Object; 

var viewresult = sut.Index(); 
: इस प्रश्न How to mock Controller.User using moq

जो आप कुछ इस तरह देना होगा पर एक नज़र डालें