加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 如何为使用StatusCode 404抛出HttpException的

发布时间:2020-12-16 09:40:37 所属栏目:asp.Net 来源:网络整理
导读:我在控制器中有一个下面的动作,它抛出HttpException,状态代码为404: public async TaskActionResult Edit(int id){ Project proj = await _service.GetProjectById(id); if( proj == null) { throw new HttpException(404,"Project not found."); }} 为了测
我在控制器中有一个下面的动作,它抛出HttpException,状态代码为404:

public async Task<ActionResult> Edit(int id)
{
    Project proj = await _service.GetProjectById(id);
    if( proj == null)
    {
        throw new HttpException(404,"Project not found.");
    }
}

为了测试这个场景,我写了下面的测试用例,我正在捕获AggregationException并重新抛出InnerException,它被期望为HttpException:

[TestMethod]
[ExpectedException(typeof(HttpException),"Project not found.")]
public void Edit_Project_Load_InCorrect_Value()
{
    Task<ActionResult> task = _projectController.Edit(3);
    try
    {
        ViewResult result = task.Result as ViewResult;
        Assert.AreEqual("NotFound",result.ViewName,"Incorrect Page title");
    }
    catch (AggregateException ex)
    {
        throw ex.InnerException;
    }
}

此测试成功运行并返回ExpectedException.我这里有两个问题:

>这是编写单元测试的正确方法还是有更多
优雅的测试方式.
>这是否可以检查单元测试
该用户获得了正确的错误页面(在这种情况下为NotFound).

解决方法

有一种更好的方法可以测试它.我们编写了一个名为AssertHelpers.cs的类,其中包含此方法.这比ExpectedException更好的原因是ExpectedException实际上并没有验证它是否被抛出,它只是允许测试在抛出时通过.
例如,如果将404代码更改为200,则测试不会失败.

public static void RaisesException<TException>(Action dataFunction,string exceptionIdentifier = null)
{
    bool threwException = false;

    try
    {
        dataFunction();
    }
    catch (Exception e)
    {
        threwException = true;
        Assert.IsInstanceOfType(e,typeof(TException));
        if (exceptionIdentifier != null)
            Assert.AreEqual(exceptionIdentifier,e.Message);
    }

    if (!threwException)
        Assert.Fail("Expected action to raise exception with message: " + exceptionIdentifier);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读