单元测试(xUnit的)一个ASP.NET MVC控制器,带有自定义输入模式?
-
26-09-2019 - |
题
我有什么我希望是一个非常简单的情况下很难找到信息。我试图单元测试我的ASP.NET MVC 2控制器,它利用自定义输入模型W / DataAnnotions的行动。我的测试框架的xUnit,在标题中提到的。
下面是我的自定义的输入模型强>:
public class EnterPasswordInputModel
{
[Required(ErrorMessage = "")]
public string Username { get; set; }
[Required(ErrorMessage = "Password is a required field.")]
public string Password { get; set; }
}
这是我的控制器(拿出一些逻辑来简化此例):
[HttpPost]
public ActionResult EnterPassword(EnterPasswordInputModel enterPasswordInput)
{
if (!ModelState.IsValid)
return View();
// do some logic to validate input
// if valid - next View on successful validation
return View("NextViewName");
// else - add and display error on current view
return View();
}
和这里是我的的xUnit情况强>(也被简化):
[Fact]
public void EnterPassword_WithValidInput_ReturnsNextView()
{
// Arrange
var controller = CreateLoginController(userService.Object);
// Act
var result = controller.EnterPassword(
new EnterPasswordInputModel
{
Username = username, Password = password
}) as ViewResult;
// Assert
Assert.Equal("NextViewName", result.ViewName);
}
当我跑我的测试,我得到以下错误在我的测试其实试图检索控制器结果时(法部分):
System.NullReferenceException: Object reference not set to an instance of an object.
在此先感谢您的帮助,您可以提供!
解决方案
我觉得我的轨道,虽然一个解决方案上。这里是我对控制器进行更改:
<强>原始强>
if (!ModelState.IsValid)
return View();
<强>更新强>
if (!TryUpdateModel(loginInput))
return View();
看来,模型结合我的测试过程中没有发生。看来,除非一个POST发生模型绑定不会发生。通过迫使试图模型结合我能得到测试通过。
注意:还有我的行动的错误是造成我原来的空引用我造成的,而试图找出为什么我的模型没有被验证
参考: 的http:// bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html
其他提示
您要您的控制器动作中提领一空实例。也许你拿出来的代号为“简化”的问题。看看在测试结果中找出调用堆栈。您可能需要模拟的东西进行试验。
不隶属于 StackOverflow