我正在以编程方式运行TestNG。我有一个用例,我需要在任何测试发生任何异常时停止执行程序。我的问题是:
以下是执行测试运行的代码片段:
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();
答案 0 :(得分:1)
据我所知,没有直接规定停止执行。
您可以使用addListener调用添加2个侦听器。 一个实施ITestListener,另一个实施IHookable,您可以使用testng site。 ITestListener会给你一个onTestFailure()方法。在这里,您可以设置一个值,表示出现故障。 在IHookable实现中,您可以检查此值,然后再调用该方法,否则跳过它。
也可以在onTestFailure方法中处理异常打印。
答案 1 :(得分:1)
使用IHookable
,如上一个答案中所述,是通过跳过以下所有方法来模拟完整的测试套件取消的好方法。但是,它不会通知(因此也不会取消)配置方法(例如,使用@BeforeClass
和@BeforeMethod
注释的方法),并且通常这是实际处理的地方。
要处理此问题,您可以将IHookable
替换为IInvokedMethodListener,其beforeInvocation
方法也会触发配置方法。如果要取消其余的测试执行,请在每次调用beforeInvocation
时抛出SkipException。
就我而言,这成功地取消了所有进一步的处理,而没有对测试结构做出任何假设。