NUnit调用Assert.Pass后抛出无明确原因AssertionException问题咨询
问题根因
- NUnit 框架中
Assert.Pass()、Assert.Fail()这类断言方法,本身就是通过抛出特定异常来通知框架测试结果、终止测试执行的。其中Assert.Pass()会抛出继承自Exception类的SuccessException,会被你代码中无差别捕获所有异常的catch (Exception ex)逻辑捕获。 - 你在catch块中又调用了
Assert.Fail(),直接覆盖了之前的通过标记,因此测试最终被判定为失败。
修复方案
你可以调整异常捕获规则,不要捕获NUnit框架自身的断言相关异常即可,两种常见实现:
- 异常过滤,排除NUnit的断言类异常
catch (Exception ex) when (!(ex is NUnit.Framework.AssertionException) && !(ex is NUnit.Framework.SuccessException)) { new SupportClasses.ScreenShot().Take(_driver, false); Assert.Fail(); }
- 仅捕获你预期的UI自动化过程中可能出现的异常,比如WebDriver的元素不存在、超时等异常,不要使用无差别的全局异常捕获。
内容的提问来源于stack exchange,提问作者Damo
相关产品推荐
相关产品推荐

