【问题标题】:C# .NET Unit Testing - How to Stop Executing a CatchC# .NET 单元测试 - 如何停止执行 Catch
【发布时间】:2015-10-05 09:03:04
【问题描述】:

我已经构建了一个控制台行应用程序,用于导入 CSV 数据、针对一组约束进行验证,然后如果它通过所有验证,则将其添加到数据库中。因此,我为常见类开发了一些类,例如:-

  • 测试数据不会太长
  • 测试数据与 RegEx 匹配
  • 测试数据存在

这些都有自己的 try-catch 块,在 try-catch 块中,我已将其设置为将电子邮件发送到带有异常的通用收件箱。这是上线时间的要求,因此我们会知道是否出现故障。

我编写了单元测试来调用这些函数,并故意调用这些函数以打破它们以了解应用程序如何执行以及这些测试的结果。但是,当然,当它中断时,它会遇到异常,然后向我发送这封电子邮件。这正在扼杀我的测试,每个测试都从

有什么方法可以指定测试不会发送电子邮件或#debug 命令在这里工作吗?

谢谢, 迈克。

【问题讨论】:

  • 如果您的代码不断抛出异常,将每个方法包装在 try catch 中会产生性能问题。请看这个,stackoverflow.com/questions/32394582/…
  • @Harry 在这种情况下,Mike 正在做一些有意义的事情,所以 应该 catch。无异常的捕获性能比您想象的要少(另请参阅:stackoverflow.com/q/1308432/50447
  • @RowlandShaw 感谢您的链接,这很有趣!

标签: c# asp.net unit-testing email console-application


【解决方案1】:

正确的答案是将您的电子邮件发送抽象到一个接口中,该接口可以通过构造函数注入到您的类中。然后,您可以使用诸如 Moq 之类的框架来模拟该接口以进行单元测试,从而允许您验证对 IEmailer.Send 的调用是否发生,而无需实际发送这些电子邮件。

【讨论】:

  • 谢谢你,我要去研究一下,然后告诉你结果如何。
  • 没问题,如果您喜欢冒险,请查看 SOLID 原则,它们将彻底改变您的开发,而且实践起来并不难。
  • 当然,分离测试也是值得的,这样一些测试会检查您是否为不同类型的错误输入获得了正确的异常,而另一个测试会检查正确类型的通过模拟/注入方法报告/记录/处理异常
  • 他真的也想模拟各种验证类。他们应该有自己的单元测试来检查他们在给定的情况下是否抛出异常 X、Y 和 Z。为了测试他的主类,他应该模拟验证类并使用 Moq 之类的东西来模拟异常,然后验证报告类是否被触发。本质上,单元测试的规则是永远模拟一切。可能值得进行实际验证电子邮件已发送等的集成测试,但他们只需要测试 IEmailSender 实现,没有别的。
  • 谢谢大家!会回来报告的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2013-12-19
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多