【问题标题】:Setting default timeout in NUnit tests在 NUnit 测试中设置默认超时
【发布时间】:2022-08-19 13:02:20
【问题描述】:

有时我的管道由于超时而在 Azure DevOps 上失败。它显示如下消息:

中止测试运行:超过 2700000 毫秒的测试运行超时

有些测试比预期的要多,但我不知道它们是哪些测试。所以,我知道每次测试不应该超过 2 分钟,我想设置一个超时。我不想为每个测试添加超时属性,并且需要在新创建的测试上添加超时属性。

我想为我的测试设置默认超时。超时后,我想看看失败的测试。经过一番研究,我发现它不支持:https://github.com/nunit/nunit/issues/1040

我找到了一种解决方案,但看起来不太好: 我在 SetUp 中启动 Timer 并在 TernDown 上停止它:

System.Timers.Timer timer;
        public System.Timers.Timer Timer
        {
            get
            {
                if (timer == null)
                {
                    timer = new System.Timers.Timer();
                    timer.Interval = 120000;
                    timer.Elapsed += Timer_Elapsed;
                }
                return timer;
            }
        }

        void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            Timer.Stop();
            Assert.Fail(\"Timeout\");
        }

        [SetUp]
        public void Setup()
        {
            Timer.Start();
        }

        [TearDown]
        public void TernDown()
        {
            Timer.Stop();
        }

它正在工作,但如果测试时间超过 2 分钟,它不会立即失败。

有没有人有同样的问题并有解决方案?

    标签: c# nunit


    【解决方案1】:

    NUnit 框架本身无法设置默认超时的原因是,这被认为是用于运行测试的程序的工作。

    如果您使用 NUnit 控制台运行器在管道中运行测试,则参数 --timeout:XXXX 可用于设置默认超时(以毫秒为单位)。

    如果您使用 vstest 运行测试,您需要在您的 .runsettings 文件中添加一个条目。默认超时的条目是DefaultTimeout

    【讨论】:

    • 我正在使用 vstest,当设置 DefaultTimeout 时,它将用于运行所有测试,我看不到哪个测试超时
    • 另外,我找不到 DefaultTimeout 参数。 vstest.console 设置上只有 TestSessionTimeout 参数
    【解决方案2】:

    经过一番研究,我找到了解决方案。看来我们也可以将 Timeout 属性放在类中。因为,我需要把它放在基类上我仍然有问题,因为当我将它设置为基类时它不起作用。它看起来像错误并在此处报告:https://github.com/nunit/nunit/issues/4156

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 2016-07-16
      • 2020-11-24
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      相关资源
      最近更新 更多