我应该强制例外来测试它们吗?

Han*_*sir 8 .net c# logging unit-testing exception

我在我的数据访问类中有这个方法,我有一个单元测试,以确保它正常工作,但我的测试不测试异常所以我的问题是我应该创建一个新的测试来强制引发异常或我应该相信catch块在异常的情况下会正常工作吗?值得努力吗?

这是一个例子:

public void UpdateProject(Project project)
    {
        using (var transaction = _session.BeginTransaction())
        {
            try
            {
                _session.Update(project);
                _session.Flush();
                transaction.Commit();
            }
            catch (HibernateException)
            {
                transaction.Rollback();
                throw;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 11

理想情况下,您应该尝试测试您可以使用的每一行代码......这将意味着强制发生异常以测试异常处理程序,并确保其正常工作.

在实践中,总会有一些代码行未被覆盖 - 但是,我会通过模拟强制执行异常,以便测试您认为至关重要的任何异常处理程序,尤其是在生产中可能发生的异常处理程序.

  • 调试崩溃位于catch块中的生产问题总是很有趣 (5认同)
  • 如果它只是记录和重新抛出,我不会打扰.大概.只要我在其他地方测试日志.如果它正在做任何重要的事情,我会的. (2认同)
  • 是的 - 虽然回滚交易可以(并非总是)一个非常重量级的过程,我相信应该进行测试.在这种情况下,我很可能会测试它. (2认同)

P S*_*ved 9

在Linux内核中,驱动程序中80%的错误都在错误处理代码中.

异常处理是许多错误的根源,您肯定应该测试所有异常路径.

当然你无法测试每一行代码.但统计数据显示程序员对异常处理的关注较少,因此您必须彻底测试它们.