【问题标题】:Unit Test and attribute单元测试和属性
【发布时间】: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


【解决方案1】:

您应该自行测试 ValidateModelAttribute。当你在控制器中装饰/注释你的方法时它是如何工作的应该是框架的责任。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多