我正试图在@AfterMethod中检测跳过的测试以进行报告。
我可以捕获失败或通过测试但是在跳过测试时似乎没有输入它。
我的测试:
@Test
public void method1 () {
Assert.fail("created failure");
}
@Test (dependsOnMethods = {"method1"})
public void method2 () {}
我的AfterMethod:
@AfterMethod
protected void afterMethod(ITestResult result){
switch (result.getStatus()) {
case ITestResult.FAILURE:
...
break;
case ITestResult.SKIP:
...
break;
case ITestResult.SUCCESS:
...
break;
}
例如,这里我只检索失败,但跳过没有传递到after方法
关于如何做的任何想法?
谢谢!
答案 0 :(得分:1)
我通过实现ITestListener类找到了一种方法,你可以在那里找到一个例子:
基本上你所做的就是创建一个类,它将捕获所有ITestResult,甚至是跳过的那个,并在其中重新定义你想要做的事情:
public class IntegrationTestListener implements ITestListener {
public void onTestSkipped(ITestResult result) {
// do your stuff here
}
}
并在测试中使用它,就像那样:
@Listeners ({IntegrationTestListener.class})
public class NotAScenario extends BasicScenario {
@Test
public void test1() {
}
}
答案 1 :(得分:1)
对于@AfterMethod,当我们知道测试已经运行时(因此不是ITestResult.STARTED),有一个简单的解决方案(经过测试并且可以正常运行):
public static void method1(Type convertTo, object toBeConverted)
{
var convertedValue = Convert.ChangeType(toBeConverted,convertTo);
}
public static void method2<TConvert>(object toBeConverted)
{
var convertedValue = (TConvert)toBeConverted;
}
在不想实施 @AfterMethod(alwaysRun = true )
public void doStuff(ITestResult result){
Integer status = result.getStatus();
if(!status.equals(ITestResult.SUCCESS) || !status.equals(ITestResult.FAILURE) ) {
// do stuff
}
}
答案 2 :(得分:0)
在testng
中,如果跳过测试用例,则不会调用@AfterMethod
,因为测试用例尚未执行。只有在执行测试用例时才会执行@AfterMethod
。
希望这有帮助。
答案 3 :(得分:0)
kartik是正确的,你不能通过方法得到它,但在报告中你会发现跳过的测试用例。
但如果你想获得跳过的测试用例,你可以在这里添加软依赖:@Test(alwaysRun = true,dependsOnMethods = {“method”})
这会创建一个软依赖项,即即使它依赖的测试失败/抛出异常也应该执行带注释的测试,并且它将在after方法之后调用。
答案 4 :(得分:0)
您可以通过执行以下操作捕获跳过测试:
public void afterMethod(ITestResult result)
throws Exception {
if (result.getStatus() == ITestResult.SKIP) {
//Some code
}