並行測試執行

Spring TestContext Framework 為在單個 JVM 中並行執行測試提供了基本支援。通常,這意味著大多數測試類或測試方法都可以在不更改測試程式碼或配置的情況下並行執行。

有關如何設定並行測試執行的詳細資訊,請參閱您的測試框架、構建工具或 IDE 的文件。

請記住,在測試套件中引入併發可能會導致意想不到的副作用、奇怪的執行時行為以及間歇性或看似隨機失敗的測試。因此,Spring 團隊提供了以下關於何時不併行執行測試的一般指南。

如果測試滿足以下條件,請勿並行執行測試:

  • 使用 Spring Framework 的 @DirtiesContext 支援。

  • 使用 Spring Framework 的 @MockitoBean@MockitoSpyBean 支援。

  • 使用 Spring Boot 的 @MockBean@SpyBean 支援。

  • 使用 JUnit Jupiter 的 @TestMethodOrder 支援或任何旨在確保測試方法按特定順序執行的測試框架功能。但請注意,如果整個測試類並行執行,則不適用此規則。

  • 更改共享服務或系統(如資料庫、訊息代理、檔案系統等)的狀態。這適用於嵌入式系統和外部系統。

如果並行測試執行失敗並出現異常,指出當前測試的 ApplicationContext 不再活動,這通常意味著 ApplicationContext 已在不同的執行緒中從 ContextCache 中移除。

這可能是由於使用了 @DirtiesContext,或者由於 ContextCache 的自動逐出。如果 @DirtiesContext 是罪魁禍首,您要麼需要找到一種避免使用 @DirtiesContext 的方法,要麼將此類測試排除在並行執行之外。如果 ContextCache 的最大大小已超出,您可以增加快取的最大大小。有關詳細資訊,請參閱關於上下文快取的討論。

Spring TestContext Framework 中的並行測試執行只有在底層 TestContext 實現提供了複製建構函式時才可能實現,如 TestContext 的 Javadoc 中所述。Spring 中使用的 DefaultTestContext 提供了這樣的建構函式。但是,如果您使用提供自定義 TestContext 實現的第三方庫,您需要驗證它是否適合並行測試執行。
© . This site is unofficial and not affiliated with VMware.