簡體   English   中英

如何在Spring測試偵聽器中獲取TestNG ITestResult?

[英]How can I get TestNG ITestResult in Spring test listener?

我正在使用Spring和TestNG編寫測試。 一個測試類的例子:

@SpringBootTest
@TestExecutionListeners(
        mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS,
        listeners = {TestListener.class}
)
public class BaseTest extends AbstractTestNGSpringContextTests
{
}

我的TestListener類擴展了TransactionalTestExecutionListener,所以我有beforeTestClass(TestContext testContext),afterTestMethod(TestContext testContext)等的重寫方法。

我的問題是,在afterTestMethod中,我需要能夠獲取TestNG ITestResult或TestResult,以便可以根據測試成功,失敗或跳過等來做不同的事情。我可以從彈簧測試偵聽器訪問ITestResult或TestResult嗎?

沒有簡單的直接方法可以訪問已執行的測試方法的ITestResult對象,因為Spring似乎沒有提供對其的訪問。

您可以嘗試執行以下操作:

  • 構造一個實用程序方法,以便在給定代表剛剛執行的@Test方法的Method對象時,它將查詢當前的ITestContext並查找其Method對象與所提供的Method對象匹配的任何ITestResult對象。
  • 讓您的偵聽器實現查詢此實用程序方法以訪問ITestResult對象。

這是一個示例實現的樣子:

public class MyListener extends TransactionalTestExecutionListener {
    @Override
    public void afterTestMethod(TestContext testContext) throws Exception {
      super.afterTestMethod(testContext);
      ITestResult currentTestResult = getCorrespondingResultFor(testContext.getTestMethod());
    }

    private ITestResult getCorrespondingResultFor(Method method) {
      ITestContext context = Reporter.getCurrentTestResult().getTestContext();
      Set<ITestResult> allResults = new HashSet<>();
      allResults.addAll(context.getPassedTests().getAllResults());
      allResults.addAll(context.getFailedTests().getAllResults());
      allResults.addAll(context.getSkippedTests().getAllResults());
      return allResults
          .stream()
          .filter(result -> result.getMethod().getConstructorOrMethod().getMethod().equals(method))
          .findAny()
          .orElse(null);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM