পূর্ববর্তী সংস্করণগুলিতে আপনি User
সরাসরি কন্ট্রোলারে সেট করতে পারতেন যা কিছু খুব সহজ ইউনিট পরীক্ষার জন্য তৈরি করেছিল।
আপনি যদি কন্ট্রোলারবেস এর উত্স কোডটি লক্ষ্য করেন User
তবে লক্ষ্য করবেন যে এখান থেকে উত্তোলন করা হয়েছে HttpContext
।
public ClaimsPrincipal User => HttpContext?.User;
এবং নিয়ামকটি HttpContext
মাধ্যমে অ্যাক্সেস করেControllerContext
public HttpContext HttpContext => ControllerContext.HttpContext;
আপনি লক্ষ্য করবেন যে এই দু'টি কেবল পঠিত সম্পত্তি। সুসংবাদটি হ'ল ControllerContext
সম্পত্তি এটির মান নির্ধারণের অনুমতি দেয় যাতে এটি আপনার প্রবেশ পথে চলে।
সুতরাং লক্ষ্য যে অবজেক্টে পেতে। কোর ইন HttpContext
বিমূর্ত হয় তাই এটি উপহাস করা খুব সহজ।
একটি নিয়ামক মত অনুমান করা
public class MyController : Controller {
IMyContext _context;
public MyController(IMyContext context) {
_context = context;
}
public IActionResult Index() {
SettingsViewModel svm = _context.MySettings(User.Identity.Name);
return View(svm);
}
}
মোক ব্যবহার করে, একটি পরীক্ষা এর মতো দেখতে পারে
public void Given_User_Index_Should_Return_ViewResult_With_Model() {
var username = "FakeUserName";
var identity = new GenericIdentity(username, "");
var mockPrincipal = new Mock<ClaimsPrincipal>();
mockPrincipal.Setup(x => x.Identity).Returns(identity);
mockPrincipal.Setup(x => x.IsInRole(It.IsAny<string>())).Returns(true);
var mockHttpContext = new Mock<HttpContext>();
mockHttpContext.Setup(m => m.User).Returns(mockPrincipal.Object);
var model = new SettingsViewModel() {
};
var mockContext = new Mock<IMyContext>();
mockContext.Setup(m => m.MySettings(username)).Returns(model);
var controller = new MyController(mockContext.Object) {
ControllerContext = new ControllerContext {
HttpContext = mockHttpContext.Object
}
};
var viewResult = controller.Index() as ViewResult;
Assert.IsNotNull(viewResult);
Assert.IsNotNull(viewResult.Model);
Assert.AreEqual(model, viewResult.Model);
}
new Claim(ClaimTypes.Name, "1")
নিয়ামক ব্যবহারের সাথে মেলেuser.Identity.Name
; তবে অন্যথায় এটি হ'ল আমি অর্জন করার চেষ্টা করছিলাম ... ড্যাঙ্ক শ্যাওন!