执行单元测试时,asp.net核心中的TryValidateModel引发Null参考异常

Ale*_*lex 8 c# unit-testing asp.net-core

我正在尝试编写用于Asp.Net Core Web API的ModelState验证的单元测试。

我读到,最好的方法是使用TryValidateModel函数。但是,每次我运行单元测试时,它都会引发NullReference异常。
我发现有很多文章暗示了这一点controller.ModelState.AddModelError("",""),但是我对此并不感兴趣,因为我认为这超出了实际模型验证的实际目的。

[TestMethod]
public void TestMethod1()
{
    var controller = new TestController();

    controller.Post(new Model());
}


public class TestController : Controller
{
    public IActionResult Post(Model model)
    {
        bool b = TryValidateModel(model)

        return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

TryValidateModel(model)总是从TryValidateModel(model, prefix)函数抛出NullReference Exception 。

感谢任何帮助。

Ego*_*kas 10

这是配置/集成问题。

您可以在 ASP.NET Core repo和github 上的另一个问题中看到一些其他信息。但我可以告诉你最简单的解决方法(我用过一次)

        var objectValidator = new Mock<IObjectModelValidator>();
        objectValidator.Setup(o => o.Validate(It.IsAny<ActionContext>(), 
                                          It.IsAny<ValidationStateDictionary>(), 
                                          It.IsAny<string>(), 
                                          It.IsAny<Object>()));
        controller.ObjectValidator = objectValidator.Object;
Run Code Online (Sandbox Code Playgroud)

  • 我不确定这就是 OP 所要求的,因为它总是有效地通过。如果我做对了,他想测试验证本身 (2认同)