【问题标题】:Nunit_Retry runs only ones on timeout failureNunit_Retry 仅在超时失败时运行
【发布时间】:2017-06-02 11:19:30
【问题描述】:

我正在使用重试,以便在测试失败时多次运行我的测试。 但是,我注意到当出现异常失败时(例如等待元素时超时),那么测试将只运行那些而不是按照配置运行。

这就是我正在尝试的:

 [Test]
[NUnit_retry.Retry(times: 3, requiredPassCount: 1)]
        public void MyTest()
     {
        some code...
     }
        
 

【问题讨论】:

    标签: c# selenium nunit appium


    【解决方案1】:

    NUnit 的[Retry] 属性仅在测试失败而不是错误时重试。这意味着AssertionExceptions 将触发重试,但其他异常不会。

    你没有说你是如何处理你的超时的——你是否使用了 NUnit [Timeout] 属性呢?这应该触发重试。但是,如果您超时导致另一种异常,您可能需要期待这种情况,而是“断言它不会发生”。您可以通过断言相关行不会引发任何异常来做到这一点,例如

    string toFetch;
    Assert.That(() => { toFetch = FetchMyString(); }, Throws.Nothing);
    

    如果您想改为在全局范围内执行某些操作,您可能希望实现一个自定义属性,该属性在 ResultState.Error 和 ResultState.Failure 上重试。看看当前的RetryAttribute 是如何实现的,这可能会让您知道从哪里开始。

    Retry Attribute Docs

    【讨论】:

    • 10x @Chris 我有一些其他形式的超时(可能)而不是抛出异常。我将如何用建议的断言完全包装它?我是否需要在每种情况下都这样做,我认为超时会出现?任何通用解决方案?
    • @YanivEliav - 我已经用更多信息和一些更正更新了我的答案。 =)
    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多