【问题标题】:Unit Test C# Can we test catch block?单元测试 C# 我们可以测试 catch 块吗?
【发布时间】:2022-01-18 07:42:29
【问题描述】:

假设我有一个登录方法;

public async Task<IActionResult> Login()
{
    try
    {
        //my codes..
    }
    catch(Exception exp)
    {
        _sLogger.Slack(exp)
        return BadRequest();
    }
}

我已经测试了所有控制器和方法,但我无法测试 catch 块?我不能抛出异常,我该怎么做?

我试过这样,但对我不起作用:

public void_WithInvalidData_ThenBadRequest()
{
    authController.UnAuthrorize();
    var result=(BadRequestResult)authController.Login();
    Assert.True(result.StatusCode == (int)HttpStatusCode.BadRequest);
    authController.Authorize();
}

【问题讨论】:

  • 通常,您可以通过在 try 块中的 mock 上抛出异常来做到这一点。你没有展示那部分,也没有展示你是否使用了任何模拟框架。
  • 为什么不能抛出异常?你能在这里分享完整的方法吗?

标签: c# unit-testing try-catch xunit


【解决方案1】:

使用以下代码

public async Task<IActionResult> Login()
{
    try
    {
       if (conditions) throw new Exception($"Message"); // throw an exception
    }
    catch(Exception exp)
    {
        _sLogger.Slack(exp)
        return BadRequest();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2020-06-08
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多