【发布时间】:2016-03-08 19:27:55
【问题描述】:
我有以下属性:
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ActionArguments["model"] == null)
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, new HttpError("Model is null") { { "CustomErrorCode", "480" } });
if (!actionContext.ModelState.IsValid)
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
//base.OnActionExecuting(actionContext);
}
}
和 WebAPI 方法:
[HttpPost]
[ValidateModel]
public async Task<HttpResponseMessage> SignUpAsync(ApiModels.RegisterAsSmartphonePhotographerApiModel model)
{
....
}
它按预期工作,但是当我想编写单元测试时:
[TestMethod]
public async Task SignUp_InvalidModelState()
{
ApiModels.RegisterAsSmartphonePhotographerApiModel model1 = new ApiModels.RegisterAsSmartphonePhotographerApiModel()
{
Username = "abc"
};
HttpResponseMessage result1 = await controller.SignUpAsync(model1);
Assert.IsFalse(result1.IsSuccessStatusCode);
Assert.IsInstanceOfType(result1, typeof(BadRequestResult));
}
我得到一个异常,因为 ValidateModelAttribute 没有被调用。如何将 ValidateModel 验证“包含”到单元测试中?
【问题讨论】:
-
我会按照this 答案中的描述分别测试
ValidateModelAttribute。
标签: c# unit-testing asp.net-web-api attributes asp.net-web-api2