2013-12-13 63 views
0

我想在每次测试后检查一些外部日志文件,如果在执行过程中出现错误。抛出AfterMethod中的异常不起作用,因为TestNG对它的处理方式不同:它只会使配置方法失败,而不会使前面的测试失败。如何在AfterMethod中的TestNG中进行测试失败?

我的做法是这样的:

@AfterMethod(alwaysRun = true) 
protected void tearDown(ITestResult result) { 
    if (thereWasAProblemDuringTestExecution()) { 
     result.setStatus(ITestResult.FAILURE); 
     result.setThrowable(getSomeThrowableSomebodyStoredAnywhere()); 
    } 

    // doing other cleanUp-tasks 
} 

但尽管如此,我的Eclipse TestNG插件说测试通过。

是否有可能(以及如何)在配置方法中失败测试(而不仅仅是配置方法)?

回答

2

尝试从类org.testng.Reporter setCurrentTestResult()方法:

result.setStatus(ITestResult.FAILURE); 
Reporter.setCurrentTestResult(result); 
1

这可能为时已晚,但我可以帮助别人谁正在寻找这一点。

您可以使用ITestContext

出于某种原因,你真的不能更新其已经产生的结果做到这一点。解决方法是添加相同的结果,将其删除,更新并再次添加。我发现删除结果的唯一方法是执行添加和删除序列。

def testContext = Reporter.currentTestResult.testContext 
testContext.passedTests.addResult(result,Reporter.currentTestResult.method) 
testContext.passedTests.getAllMethods().remove(Reporter.currentTestResult.method) 
result.setStatus(ITestResult.FAILURE) 
testContext.failedTests.addResult(result,Reporter.currentTestResult.method) 

我正在使用Groovy。

+0

你有可能在java中提供相同的上述代码吗?谢谢! – OverrockSTAR

+0

我试图在java中做以下事情 - 我想要做的是,如果TC失败(我再试两次),然后将它们标记为第一个两个FAILED CASE的SKIP,最后一个也失败,然后将其报告为FAILED。代码:'ITestContext tc = Reporter.getCurrentTestResult()。getTestContext(); \t \t \t tc.getFailedTests()。getAllMethods()。remove(Reporter.getCurrentTestResult()。getMethod()); \t \t \t result.setStatus(ITestResult.SKIP); \t \t \t tc.getSkippedTests()。addResult(result,Reporter.getCurrentTestResult()。getMethod());'pls check – OverrockSTAR

相关问题