2017-08-19 38 views
0

我想知道是否有某種方法可以調整TestNG,以便首先執行由@AfterMethod註釋的方法,然後再運行測試偵聽器中的onTestSuccess/onTestFailure方法。調整在onTestSuccess/onTestFailure之前運行@AfterMethod

在我的項目中,由@AfterMethod註解的方法具有打印每個測試方法的響應正文的邏輯。 onTestSuccess/onTestFailure方法具有打印消息的邏輯(例如「測試完成」)。我不想讓代碼在我的項目中的每個測試類的@AfterMethod中打印此消息。

問題是,首先顯示消息「測試完成」,然後按照TestNG設計打印響應正文,這可能是正確的,但這是我想要調整的。

+1

[有沒有辦法在IResultListener方法之前運行@after方法?](https://stackoverflow.com/questions/10432490/is-there-a-way-to-run-after-method- before-iresultlistener-methods) – nullpointer

回答

0

當前的實現首先運行偵聽器,然後運行方法之前/之後。

目前,您無法更改偵聽器的順序,並且在方法不是偵聽器之前/之後。

+1

[有沒有辦法在IResultListener方法之前運行@after方法?](https://stackoverflow.com/questions/10432490/is-there-a-way-to-run- after-method-before-iresultlistener-methods)? – nullpointer

+1

@nullpointer真實的,同樣的問題。但是答案在新版本/當前版本中無法使用,因爲沒有指定這樣的用法。 – juherr

+0

同意。希望你能回答這個問題並將其重定向到它。 :) – nullpointer

0

如果主要問題是阻止在@AfterMethod末尾添加自定義消息,這只是您想避免的全局重構,我會考慮AOP技術。下面是一個AspectJ的樣本:

@Slf4j 
@Aspect 
public class MessageAspect { 

    @After("execution(@org.testng.annotations.AfterMethod * target.package.path..*.*(..))") 
    public void print(final JoinPoint joinPoint) { 
     log.info("Test completed"); 
    } 
} 

在你的情況下,使用AOP的主要優點是0重構最小的努力。

+0

你能否詳細說明一下TestNG? –

+0

@AkshayMaldhure不知道我有你的問題。藉助AspectJ庫,您可以攔截任何方法調用。包括那些用'@ AfterMethod'註解的。所以你甚至不需要爲這樣簡單的日誌記錄任務創建'onTestSuccess' /'onTestFailure'事件監聽器。添加10行AOP代碼比從TestNG社區請求重新排序功能要容易得多。 –

+0

好吧,聽起來不錯。讓我試着去做。 –

相關問題