在浏览我的应用程序代码时,我遇到了这个问题:
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/