您不必测试框架是否正在执行其设计目的。相反,与之前在评论中建议的类似,我建议使用
ApiController
并将操作重构为该版本Asp的文档中建议的语法。Net Web API
public IHttpActionResult Register(PostUserRegistration model) {
if (!ModelState.IsValid)
return BadRequest(ModelState); //<-- will extract errors from model state
//...code removed for brevity
return Ok();
}
上述方法的一个简单单元测试示例如下所示。。。
[TestMethod]
public void Register_ReturnErrorsWithBadRequest_IfValidationFails() {
//Arrange
PostUserRegistration model = new PostUserRegistration {
Name = "Wai Yan Hein",
Email = "waiyanhein@gmail.com",
Password = ""
};
var accRepoMock = new Mock<IAccountRepo>();
var controller = new AccountsController(accRepoMock.Object);
controller.ModelState.AddModelError("", "Faking some model error");
//Act
var response = controller.Register(model) as InvalidModelStateResult; //<-- Note the cast here
//Assert
Assert.IsNotNull(response);
}
如果注入的依赖项不会在测试中的方法中被引用/调用,那么您也可以放弃模拟并注入
null
. 然而,这取决于原始问题中未提供的代码。