c# – 单元测试中的模型状态验证

我正在为这样的控制器写一个单元测试:

public HttpResponseMessage PostLogin(LoginModel model)
{
    if (!ModelState.IsValid)
        return new HttpResponseMessage(HttpStatusCode.BadRequest);
}

模型看起来像:

public class LoginModel
{
    [Required]
    public string Username { set; get; }
    [Required]
    public string Password { set; get; }
}

然后我有这样的单元测试:

[TestMethod]
public void TestLogin_InvalidModel()
{
    AccountController controller = CreateAccountController();

    ...
    var response = controller.PostLogin(new LoginModel() {  });

    Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);

}

实际上,ModelState被验证…这对我来说是奇怪的,因为这两个字段是必需的…
有人建议吗

模型状态有效的原因是在新建控制器时创建新的模型状态. Web API在这里没有为您做参数绑定,所以甚至没有机会添加模型状态错误.

如果要将其作为单元测试,那么您应自行添加模型状态错误,并测试发生的情况.

如果您想测试模型状态对真实请求无效,我建议您阅读此博文:

http://blogs.msdn.com/b/youssefm/archive/2013/01/28/writing-tests-for-an-asp-net-webapi-service.aspx

并尝试针对内存服务器进行测试.您的案例的一个小笔记是,您可能希望在请求上使用StringContent而不是ObjectContent,以确保Web API正确地反序列化并绑定正文.

相关文章
相关标签/搜索