c# - 在测试中抛出新的异常

标签 c# exception testing fitnesse

在浏览我的应用程序代码时,我遇到了这个问题:

private string[] ReadFromFile(string path)
{
    string[] data = null;
    try
    {
        data = File.ReadAllLines(path);
    }
    catch (Exception)
    {
        throw new Exception("The file is not correct");
    }

    return data;
}

好吧,我知道这段代码不好,我正要重构它。但是,此代码用于 FitNesse 的某些测试的定义。此代码从未用于生产。此方法中给出的参数应该总是正确的。所以我想删除整个 try/catch block ,如果它应该崩溃就让它崩溃。 FitNesse 会向我们提供有关抛出的异常的全部详细信息,但由于它是一个测试装置,我想知道它是否可以ok

File.ReadAllLines 可以抛出一打不同的异常。

所以我的问题是:是否可以接受在生产环境之外使用此类代码,即使用于测试生产代码,并且在受控的环境中?还是在任何情况下都不好?

最佳答案

在单元测试中使用这样的代码比在生产代码中使用更糟糕。在生产代码中,有时隐藏一些异常细节可能是有意义的(尽管它们仍然应该通过例如 InnerException 传递)但在单元测试中你应该总是尽可能多地看到,因为它们是为了(开发人员,而非最终用户)。所以我认为应该删除整个 try/catch block 。

此外,如果在其他情况下您希望测试失败,那么我建议使用 Assert.Fail("message") 构造,因为它使测试更加清晰,如果出现以下情况,则应将测试视为失败它达到了这一点。不过不确定它是否可以应用于 FitNesse。

关于c# - 在测试中抛出新的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11791827/

相关文章:

c# - TypeConverter 无法从某些基本类型转换为相同的基本类型

javascript - 如何测试我的 Controller ?

c# - 如何伪造 C# 单元测试中内置方法的返回?

testing - 如何使用 TestCafe 确定元素属性是否存在?

c# - IIS 7.5、Web 服务和 HTTP 405 错误

c# - 在 .NET RESTful 应用程序中使用 Ninject?

python - 使用 KeyboardInterrupt 关闭多线程应用程序

java - 在 Controller Spring MVC中控制异常流

c# - .Net5 身份注销

c# - 我们如何以及在哪里编写 try catch block 来处理异常