سؤال

لقد كنت أستخدم فئة MVCMOCKHELPERS الموجودة في هانزيلمان بلوق للمرور في httpcontext سخرية. مددت ذلك إلى حد ما لإضافة بعض بيانات المصادقة التي نحتاجها وبالنسبة للجزء الأكبر كان هذا رائعا.

المشكلة التي نواجهها هي أن السياق الذي نقدمه لمراقب تحكم له قيمة فارغة في HTTPCONTEXT.RESPONSE.OUTPUT، مما يؤدي إلى إلقاء بعض الاستثناءات. لست متأكدا مما يجب إضافته للحصول على هذا العمل.

هنا هي طريقة FAILHTTPConeXT الحالية ():

public static HttpContextBase FakeHttpContext()
{
    var context = new Mock<HttpContextBase>();
    var request = new Mock<HttpRequestBase>();
    var response = new Mock<HttpResponseBase>();
    var session = new Mock<HttpSessionStateBase>();
    var server = new Mock<HttpServerUtilityBase>();

    // Our identity additions ...
    var user = new Mock<IPrincipal>();
    OurIdentity identity = (OurIdentity)Thread.CurrentPrincipal.Identity;

    context.Expect(ctx => ctx.Request).Returns(request.Object);
    context.Expect(ctx => ctx.Response).Returns(response.Object);
    context.Expect(ctx => ctx.Session).Returns(session.Object);
    context.Expect(ctx => ctx.Server).Returns(server.Object);
    context.Expect(ctx => ctx.User).Returns(user.Object);
    context.Expect(ctx => ctx.User.Identity).Returns(identity);
    return context.Object;
}

فيما يلي طريقة الانفجار (التي هي جزء من XMLResult MVC Project XMLResult):

public override void ExecuteResult(ControllerContext context)
{
    if (_objectToSerialize != null)
    {
       var xs = new XmlSerializer(_objectToSerialize.GetType());
       context.HttpContext.Response.ContentType = "text/xml";
       xs.Serialize(context.HttpContext.Response.Output, _objectToSerialize);
    }
}

ما الذي أحتاجه لإضافة في طريقة FakeHTTPContext لمنع استثناء فارغ عند الإشارة إلى context.httpcontext.response.output؟

توضيح: الحل الذي أبحث عنه يحتاج إلى القيام به في موك، وليس وحيد القرن. ذكرت موك في عنوان السؤال ولكن أهملت في الجسم في الجسم. آسف لأي ارتباك.

الدقةأضفت السطرين التاليين من التعليمات البرمجية إلى طريقة FakehttpContext ():

var writer = new StringWriter();
context.Expect(ctx => ctx.Response.Output).Returns(writer);

هذا يمنع استثناء فارغ. لست متأكدا مما إذا كانت الإجابة الجيدة على المدى الطويل، لكنها تعمل الآن.

هل كانت مفيدة؟

المحلول

في الاختبارات ل mvccontrib يظهر الملف mvcmockhelps كيف يتم ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top