只是为了设置上下文,我的测试用例创建了一些数据,我想在拆解时删除那些数据。我想以这样的方式实现通用的拆解过程(通过AfterMethod / AfterClass / Listener),它将检查返回值(及其类型,主要是域对象)并清理数据(如下所示)。
public class SampleTest {
@AfterMethod
public void teardown(Object returnValueFromTest){
//inspect returnValueFromTest and perform necessary clean up.
}
@Test
public String testEventGeneration(){
//generate event
//returning generated event id.
return "E1234";
}
@Test
public Market testMarketGeneration(){
//generate market
//returning generated market.
return someMarket;
}}
关于如何在testNG中实现这一点的任何想法/想法?我考虑过像IHookable那样实现一个监听器,但找不到可以帮助我获得返回值的监听器。
答案 0 :(得分:1)
你可以简单地处理这个问题,如果你想在执行完所有测试后将所有内容都清空,你必须使用@AfterClass注释而不是@AfterMethod注释。 @AfterMethod注释在测试类中的每个测试方法之后触发。
流动的代码将完成您的任务。如果要在列表器级别实现此功能,可以实现 ITestListener ,并且在onFinish方法中可以实现逻辑。
公共类SampleTest { private String event_id = null;
@AfterClass(alwaysRun = true)
public void teardown(){
//delete event from the db(event_id)
}
@Test
public void testEventGeneration(){
//generate event
//returning generated event id.
event_Id= "E1234";
}}
答案 1 :(得分:0)
如果有与之关联的返回值,AFAIK Testng甚至不会执行注释为Test的方法。
因此,如果您想根据设置的值进行拆分,则需要在全局上下文或外部设置这些值,而不是作为返回值。根据您想要拆除的时间,您可以将您的拆卸逻辑作为侦听器或任何After方法编写。
答案 2 :(得分:0)
你考虑过使用InvokedMethodListener2吗?
public Class BaseTestNg {
ITestContext ctx;
public ITestContext getContext(){
return this.ctx;
}
@BeforeClass
public void setContext( final ITestContext ctx ) {
this.ctx = ctx;
}
}
public Class SampleTest extends BaseTestNg {
@Test
public Market testMarketGeneration(){
//generate market
this.getContext().setAttribute("market", someMarket);
//returning generated market.
return someMarket;
}
}
import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener2;
import org.testng.ITestContext;
import org.testng.ITestResult;
public class InvokedMethodListener2Impl implements IInvokedMethodListener2 {
@Override
public void afterInvocation( final IInvokedMethod method, final ITestResult testResult ) {
// TODO Auto-generated method stub
}
@Override
public void afterInvocation( final IInvokedMethod method, final ITestResult testResult, final ITestContext context ) {
//read object from context
//Market = (Market) context.getAttribute("market");
// testResult.setStatus( ITestResult.FAILURE );
}
@Override
public void beforeInvocation( final IInvokedMethod method, final ITestResult testResult ) {
// TODO Auto-generated method stub
}
@Override
public void beforeInvocation( final IInvokedMethod method, final ITestResult testResult, final ITestContext context ) {
// TODO Auto-generated method stub
}
}