从SpecFlow设置Nunit TimeoutAttribute

时间:2012-02-23 12:00:58

标签: .net testing nunit integration-testing specflow

我使用SpecFlow编写了几个长期运行的端到端集成测试,但由于Nunit超时而导致它们失败。

将[Timeout(x)]属性添加到TestFixture可以解决问题,但每次更新功能时都会被覆盖。

如何以SpecFlow尊重的方式删除或延长超时?

3 个答案:

答案 0 :(得分:1)

我只是了解Specflow,但您是否可以实现可以执行此操作的自定义标记?也许您可以将它们放在BeforeScenario或BeforeFeature钩子上?

答案 1 :(得分:1)

我们谈论多长时间? > 1分钟? 它必须是完整的集成测试吗?

我正在阅读黄瓜书 - 它建议你尽可能地为你的GIVEN步骤作弊,以减少运行时间。 GIVEN步骤描述了过去。

我有一个申请表,有5个部分要完成,只有在完成所有部分后才能提交。我想测试在提交应用程序时发生的一些功能,最初我的GIVEN语句通过Selenium驱动网页完成表单的所有5个部分以便我可以提交,我将其更改为单个SQL命令来设置应用程序要完成的所有部分的状态。这比运行时间短了一分钟。

我测试的是提交行为,填写部分测试是在其他地方完成的。

答案 2 :(得分:1)

正如@DisscCoder所说, 将标记类别添加到要素文件中的方案,并添加一个在钩子类中匹配的钩子.... SpecFlow为字符串匹配的所有场景运行前场景代码钩子代码。

namespace ClassLibrary1
{
    [Binding]
    public class Hooks1
    {               
        [BeforeScenario("LongTest")]
        public void BeforeScenario()
        {
             // Code to set Nunit timeout
        }                         
    }
}

小黄瓜:

@LongTest
Scenario: Calc Pi to 1m digits (long)
    Given I am computing PI
    And my precision is 1 million digits
    Then my result is 3.14...