পূর্ববর্তী সংস্করণগুলিতে আপনি 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; তবে অন্যথায় এটি হ'ল আমি অর্জন করার চেষ্টা করছিলাম ... ড্যাঙ্ক শ্যাওন!