• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

单元测试(xUnit)具有自定义输入模型的ASP.NET Mvc控制器?

asp.net-mvc 来源:Danny Douglass 3次浏览

我很难找到我期望成为一个非常简单的场景的信息。我试图在我的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


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)