发生异常时如何停止TestNG执行?

时间:2012-03-28 23:42:18

标签: testng

我正在以编程方式运行TestNG。我有一个用例,我需要在任何测试发生任何异常时停止执行程序。我的问题是:

  1. 当Test或配置方法发生异常时,强制TestNG停止执行的最佳方法是什么?
  2. 以编程方式执行时在控制台中捕获异常?
  3. 以下是执行测试运行的代码片段:

    TestListenerAdapter tla = new TestListenerAdapter();
    IMethodInterceptor im = new  TestMethodInterceptor();
    TestNG testng = new TestNG();
    testng.setTestClasses(new Class[] { TestClass1.class, TestClass2.class});
    testng.addListener(tla);
    testng.setMethodInterceptor(im);
    testng.run(); 
    

2 个答案:

答案 0 :(得分:1)

据我所知,没有直接规定停止执行。

您可以使用addListener调用添加2个侦听器。 一个实施ITestListener,另一个实施IHookable,您可以使用testng site。 ITestListener会给你一个onTestFailure()方法。在这里,您可以设置一个值,表示出现故障。 在IHookable实现中,您可以检查此值,然后再调用该方法,否则跳过它。

也可以在onTestFailure方法中处理异常打印。

答案 1 :(得分:1)

使用IHookable,如上一个答案中所述,是通过跳过以下所有方法来模拟完整的测试套件取消的好方法。但是,它不会通知(因此也不会取消)配置方法(例如,使用@BeforeClass@BeforeMethod注释的方法),并且通常这是实际处理的地方。

要处理此问题,您可以将IHookable替换为IInvokedMethodListener,其beforeInvocation方法也会触发配置方法。如果要取消其余的测试执行,请在每次调用beforeInvocation时抛出SkipException

就我而言,这成功地取消了所有进一步的处理,而没有对测试结构做出任何假设。