【问题标题】:Set Nunit TimeoutAttribute from SpecFlow从 SpecFlow 设置 Nunit TimeoutAttribute
【发布时间】:2012-02-23 12:00:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net testing nunit integration-testing specflow


    【解决方案1】:

    我只是开始了解 Specflow,但您能否实现一个自定义标签来做到这一点?也许您可以将它们放在 BeforeScenario 或 BeforeFeature 挂钩中?

    【讨论】:

    • 我不知道,说实话,实际上已经有一年多没有使用 SpecFlow 了,因为换了雇主。不过,新人刚刚开始引入它,所以我可能很快就会尝试一下。
    • [BeforeScenario("TagName)]
    【解决方案2】:

    我们所说的运行时间有多长? > 1 分钟? 是否必须是完整的集成测试?

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

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

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

    【讨论】:

    • 你提出了一个可能的观点,但在这种特殊情况下,我稍微滥用了 SpecFlow 作为编写端到端测试的快速方法。对我来说,重点是尽可能少地模拟这个特定的用例。
    • @mavnn,我以为我是唯一一个在意思是“好”时写过“可以”的人。这是我第一次看到它不是我。当然,除非人们经常这样做,但我没有注意到它,原因与我自己这样做的原因相同。我现在想太多了。
    • @Holf - 不,我一直这样做;我将其称为拼音打字,因为我几乎从不手写 :)。任何听起来相似的词都是公平的游戏,最糟糕的是拼写检查没有帮助!
    【解决方案3】:

    正如@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...
    

    【讨论】:

    • 这不起作用,因为他正在寻找添加 NUnit 属性“超时”
    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2011-12-24
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多