跳过需要很长时间的单元测试

时间:2010-09-21 12:16:08

标签: visual-studio-2008 unit-testing visual-studio-2010 mstest tfs2008

我正在使用MS-Test进行单元测试编写。 我的大部分测试持续时间不到0.1秒。 我想以某种方式告诉VS“忽略在我手动运行测试时需要花费很长时间才能运行的测试,并且当你在构建上运行它们时不要忽略它们。

我知道在nunit中有一个“显式”属性,只有在你明确选择他时才会运行测试。我认为这可能有所帮助,但不确定。

请帮助

4 个答案:

答案 0 :(得分:2)

以与语言无关,与框架无关的方式思考这个问题会让你所要求的东西有些难题:

测试工具在运行之前不知道任何单元测试的执行时间;因为这不仅取决于测试工具和测试本身,还取决于测试中的应用程序。对此的止损解决方案是做一些事情,比如设置时间限制。如果你这样做,那么这就引出了一个问题,当一个测试超时,是否应该通过,失败,或者可能属于其他(第三)类别? ......难题!

因此,为了避免这种情况,我提出你应该采用一种不同的策略,你作为开发人员决定你希望在不同情况下运行的整套测试的哪些子集。例如:

  • 一组冒烟测试;
    • 即。您希望始终首先运行的测试。如果其中任何一个失败,那么您不想打扰执行任何测试。只在这个组中放置真正的基础测试。
  • 最小一组测试;
    • 根据您的具体要求,这将是一组包含所有“快速”或“快速”测试的测试,您可以确定它们是哪些。
  • 全面测试集;
    • 不属于任何其他类别的测试。根据您的具体要求,这将是“慢”或“长”的测试。

运行测试时,您可以选择运行哪些测试子集,也可以在某种形式的脚本中进行配置。

我使用这种方法在自动化测试中有很好的效果(集成到持续集成系统中)。我这样做是通过一个脚本,根据输入参数,决定只执行冒烟测试加上最小测试;或者冒烟测试,最小测试和综合测试(即所有测试)。

HTH

答案 1 :(得分:0)

您可以使用Timeout属性,并以毫秒为单位指定超时。如果超时通过,则测试失败。

答案 2 :(得分:0)

是这样的

<TestMethod(), Timeout(1000)>
    Public Sub OutputWebservice_SubmitOutputJob_SubmitEmailJobHF001()
    End Sub

答案 3 :(得分:0)

您应该设置测试,以便它们在提交后在您的服务器上运行,然后通知开发人员(可能通过电子邮件?)任何失败。

这样,无论持续时间如何,测试都会运行,但不会浪费程序员时间。

相关问题