我遇到了单元测试的一些问题.
DefaultHttpContext.RequestServices是nullAuthenticationService对象,但我不知道要传递什么参数我该怎么办?如何进行单元测试HttpContext.SignInAsync()?
正在测试的方法
public async Task<IActionResult> Login(LoginViewModel vm, [FromQuery]string returnUrl)
{
if (ModelState.IsValid)
{
var user = await context.Users.FirstOrDefaultAsync(u => u.UserName == vm.UserName && u.Password == vm.Password);
if (user != null)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName)
};
var identity = new ClaimsIdentity(claims, "HappyDog");
// here
await HttpContext.SignInAsync(new ClaimsPrincipal(identity));
return Redirect(returnUrl ?? Url.Action("Index", "Goods"));
}
}
return View(vm);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的.
[TestMethod]
public async Task LoginTest()
{
using …Run Code Online (Sandbox Code Playgroud) 在ViewComponentobject中,HttpContext并且User是只读属性.
如何对这样的组件进行单元测试?
我正在使用MSTest Freamwork.
以下属性用于我的代码中
public ViewViewComponentResult Invoke()
{
var vm = new SummaryViewModel();
if (User.Identity is ClaimsIdentity identity && identity.IsAuthenticated)
{
vm.IsAuthenticated = true;
vm.UserName = identity.Claims.FirstOrDefault(c => c.Type == "UserName").Value;
vm.PhotoUrl = identity.Claims.FirstOrDefault(c => c.Type == "FacePicture").Value;
}
return View(vm);
}
[TestMethod]
public void UserSummaryVcTest()
{
var component = new UserSummaryViewComponent();
var model = component.Invoke().ViewData.Model as SummaryViewModel;
Assert.AreEqual("UserName", model.UserName);
}
Run Code Online (Sandbox Code Playgroud) c# unit-testing asp.net-core asp.net-core-mvc-2.0 asp.net-core-viewcomponent