单元测试(xUnit)具有自定义输入模型的ASP.NET Mvc控制器?
我很难找到我期望成为一个非常简单的场景的信息。我试图在我的ASP.NET Mvc 2控制器上使用具有DataAnnotions的自定义输入模型对单元进行单元测试。正如标题中提到的,我的测试框架是xUnit。单元测试(xUnit)具有自定义输入模型的ASP.NET Mvc控制器?
这里是我的自定义输入模型:
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();
}
这里是我的x单位事实(也简化了):
[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 (!TryUpdateModel(loginInput)) return View();
原始
if (!ModelState.IsValid) return View();
似乎模型结合我的测试过程中没有发生。除非发生POST,否则模型绑定似乎不会发生。通过强制尝试模型绑定,我能够通过测试。
注意:也有在我的行动的错误是造成我试图找出为什么我的模型没有被证实引起了我原来的空引用。
参考: http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html
回答:
您在控制器操作中取消了一个空实例的引用。您可能在代码中“简化”了这个问题。看看测试结果中的调用堆栈来找出什么。您可能需要为测试嘲弄某些东西。
以上是 单元测试(xUnit)具有自定义输入模型的ASP.NET Mvc控制器? 的全部内容, 来源链接: utcz.com/qa/260243.html