আমি যে এএসপি.এনইটি এমভিসি অ্যাপ্লিকেশনটি তৈরি করেছি তাতে ইউনিট টেস্টিং যুক্ত করার চেষ্টা করছি। আমার ইউনিট পরীক্ষায় আমি নিম্নলিখিত কোডটি ব্যবহার করি:
[TestMethod]
public void IndexAction_Should_Return_View() {
var controller = new MembershipController();
controller.SetFakeControllerContext("TestUser");
...
}
নিয়ামক প্রসঙ্গে উপহাস করার জন্য নিম্নলিখিত সহায়কগুলির সাথে:
public static class FakeControllerContext {
public static HttpContextBase FakeHttpContext(string username) {
var context = new Mock<HttpContextBase>();
context.SetupGet(ctx => ctx.Request.IsAuthenticated).Returns(!string.IsNullOrEmpty(username));
if (!string.IsNullOrEmpty(username))
context.SetupGet(ctx => ctx.User.Identity).Returns(FakeIdentity.CreateIdentity(username));
return context.Object;
}
public static void SetFakeControllerContext(this Controller controller, string username = null) {
var httpContext = FakeHttpContext(username);
var context = new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
controller.ControllerContext = context;
}
}
এই পরীক্ষার শ্রেণিটি একটি বেস ক্লাসের উত্তরাধিকার সূত্রে প্রাপ্ত যা নিম্নলিখিত:
[TestInitialize]
public void Init() {
...
}
এই পদ্ধতির অভ্যন্তরে এটি একটি লাইব্রেরি কল করে (যার উপরে আমার কোনও নিয়ন্ত্রণ নেই) যা নিম্নলিখিত কোডটি চালানোর চেষ্টা করে:
HttpContext.Current.User.Identity.IsAuthenticated
এখন আপনি সম্ভবত সমস্যাটি দেখতে পাচ্ছেন। আমি নিয়ন্ত্রকের বিরুদ্ধে জাল এইচটিপিপি কনটেক্সট সেট করেছি তবে এই বেস ইন্স পদ্ধতিতে নয়। ইউনিট টেস্টিং / উপহাস আমার কাছে খুব নতুন তাই আমি নিশ্চিত করতে চাই যে আমি এই অধিকার পেয়েছি। এইচটিটিপি কনটেক্সটকে মক আউট করার জন্য আমার সঠিক উপায় কী তা যাতে এটি আমার নিয়ামক এবং যে কোনও লাইব্রেরি যা আমার উদ্যোগ পদ্ধতিতে ডাকা হয় সেগুলি জুড়ে ভাগ করা যায়।