2012-10-04 85 views
0

只是爲了設置上下文,我的測試用例創建了一些數據,我想在拆卸時刪除這些數據。我想通過這樣一種方式實現通用的拆卸過程(通過AfterMethod/AfterClass/Listener),它將檢查返回值(及其類型,主要是域對象)並清理數據(如下所示)。testNG:如何在@AfterMethod或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這樣的監聽器,但是找不到可以幫助我獲得返回值的監聽器。

回答

1

您可以簡單地處理這個問題,如果您想在所有測試執行完畢後排除所有內容,則必須使用@AfterClass註釋而不是@AfterMethod註釋。 @AfterMethod註釋會在測試類中的每個測試方法之後觸發。

流動的代碼將簡單地完成您的任務。如果你想在列表級別實現這個功能,你可以實現ITestListener和onFinish方法,你可以實現你的邏輯。

public class SampleTest {0}私人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"; 
}} 
+0

感謝您的回答,但這不是我所期待的。我想通過這樣一種方式實現拆卸過程(通過AfterMethod/AfterClass/Listener),它將檢查返回值(及其類型,主要是域對象)並清理數據。換句話說,根據將從測試用例返回的域對象,拆卸方法/偵聽器將知道要刪除的內容並執行清理。這裏的關鍵是自動化拆卸過程,我不希望在每個測試中保留本地實例,只是爲了拆除,除非沒有其他更好的方法。 – Sateesh

0

AFAIK Testng甚至不會執行註釋爲Test的方法,如果存在與它們關聯的返回值。

因此,如果您想根據設置的值來拆卸,那麼您需要在全局上下文中或外部設置這些值,而不是作爲返回值。根據你想要拆卸的時間,你可以將你的拆卸邏輯寫成一個偵聽器或者任何After方法。

+1

實際上,您可以啓用測試用例來返回testNG中的值。 Sateesh

+0

嗯真的..讓我知道.. –

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 

    } 

} 
相關問題