2015-10-05 69 views
1

我已经构建了一个控制台行应用程序来导入CSV数据,验证一组约束,然后将其添加到数据库中,如果它通过所有验证。因此,我已经开发了通用类等几类: -C#.NET单元测试 - 如何停止执行捕获

  • 测试数据不太长
  • 测试数据相匹配的正则表达式
  • 测试数据存在

这些都有他们自己的try-catch块,并且在try-catch块中,我已经将它设置为通过Exception发送一封电子邮件到一个通用收件箱。这是它启用时的一个要求,所以我们知道是否某件事情失败了。

我已经编写了单元测试来调用这些函数,并故意调用这些函数以打破它们,以查看应用程序如何执行以及这些测试的结果。但当然,当它打破它击中例外,然后发送给我这封电子邮件。这正在破坏我的测试,每次测试都从< 1ms变为10-15secs,并且我们每次测试都会收到这些垃圾邮件。然而,我们需要在项目正式进行时保留这些测试。

有什么方法可以指定测试不会发送电子邮件,或者#debug命令是否可以在这里使用?

谢谢, 迈克。

+0

如果代码不断抛出异常,将try catch中的每个方法包装都会产生性能问题。请参阅这里,http://stackoverflow.com/questions/32394582/wrap-every-method-in-try-catch-or-specific-part-of-code – Haris

+2

@在这种情况下,迈克正在做一些有意义的事情,所以*应该*抓住。捕获的性能没有例外是比你想象的更少的开销(参见:http://stackoverflow.com/q/1308432/50447) –

+0

@RowlandShaw感谢您的链接,这很有趣! – Haris

回答

4

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

+0

谢谢你,我要去研究并让你知道它是如何发生的。 –

+0

没问题,如果你觉得喜欢冒险的话,看看SOLID的原则,他们会为你的发展带来革命性的变化,而且实际上并没有那么难。 –

+0

当然,也应该将测试分开,以便一些测试检查您是否为不同类型的错误输入获取了正确的例外,另一个测试检查是否报告/记录/处理了正确类型的例外通过模拟/注入方法 –