」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 Java 的 carlspring/idempotence 框架編寫可平行測試

使用 Java 的 carlspring/idempotence 框架編寫可平行測試

發佈於2024-11-08
瀏覽:974

Writing parallelizable tests with the carlspring/idempotence framework for Java

免責聲明

這是我在 Medium.com 上文章的重新發布,希望作為 #Hacktoberfest 的一部分接觸到更多 OSS 開發人員。

介紹

您是否曾經必須處理一些片狀並行測試,這些測試大部分時間都能通過,但隨後突然開始因不一致的隨機錯誤而失敗?您是否曾經必須修復共享相同資源檔案的測試並並行修改它們,以使您和其他測試的結果感到困惑?您是否花了無數個夜晚嘗試重構此類程式碼,使其能夠正確並行化並獲得可重現且有保證的結果?

這是一個複雜的主題,並不總是可以直接解決,特別是在現有的大型程式碼庫中。然而,遵循一組簡單的規則可以幫助您實現這一目標,而 carlspring/idempotence 框架旨在幫助您實現這一點。

什麼是測試隔離?

為了讓測試始終可重現,您需要確保它們的資源檔案僅包含並隔離給它們。這意味著每個測試都應該獨佔其測試資源,其他測試不應修改它們。

什麼是測試冪等性?

測試冪等性意味著您的測試將始終傳回相同的結果。無論它們被執行了多少次,也無論並行運行什麼其他測試。

Java 的 carlspring/idempotence 框架是什麼

這是一個輕量級框架,有助於以隔離的方式為 JUnit5 測試定義和複製測試資源檔案。測試資源透過註解的方式定義,並複製到各自的目錄中,以幫助實現測試資源分離和隔離。

Java carlspring/冪等框架如何運作

所有常用的測試資源照常存放在 src/test/resources 目錄下。然後,每個測試方法使用 @TestResources 註解定義它所需的資源。該框架將這些資源複製到每個測試方法的獨立目錄中。這確保了它能夠獨佔存取所需的資源,從而防止並行運行的其他測試(包括同一測試類別中的其他測試方法)的干擾。

對於每個建置工具,都有一個單獨的依賴項,其中包含該工具的特定目錄佈局的路徑相關轉換邏輯。 (作為一個非常簡單的例子,Maven 將建置的程式碼放在目標下,而 Gradle 使用建置來實現此目的;資源的放置方式不同,等等)。下面將對此進行更多解釋。

如何使用 Java carlspring/idempotence 框架來撰寫測試

以下是您需要開始的步驟。

定義依賴關係

您需要為建置工具定義對應的依賴項。您可以在此處查看最新發布的版本。

  • 對於 Gradle(使用 Groovy DSL):

testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"


  • Gradle(使用 Kotlin DSL):

testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")


  • 對於 Maven:


    org.carlspring.testing.idempotence
    idempotence-maven
    1.0.0-rc-3
    test



新增註釋

您的測試類別必須使用 @ExtendWith(TestResourceExtension.class) 註解進行註解。該註釋負責資源的實際複製。

您還需要使用@TestResources註解來註解您的測試方法,以指定它們需要的資源。

例如:


package com.foo;

import org.carlspring.testing.idempotence.annotation.TestResource;
import org.carlspring.testing.idempotence.annotation.TestResources;
import org.carlspring.testing.idempotence.extension.TestResourceExtension;

@ExtendWith(TestResourceExtension.class)
class MyTest {

    @Test
    @TestResources({ @TestResource(source = "classpath:/foo.txt"),
                     @TestResource(source = "classpath*:/**/bar.txt")} )
    void testFoo()
    {
        // Perform whatever checks you need using these resources
    }

}


對於每種測試方法,將使用以下格式建立目錄:

  • 對於 Gradle 項目,有一個名為 MyTest 的測試,其方法為 testFoo, 它們將被放置在:

build/test-resources/MyTest-testFoo/nested/dir/foo.txt
build/test-resources/MyTest-testFoo/bar.txt


  • 對於 Maven 項目,有一個名為 MyTest 的測試,其方法為 testFoo, 它們將被放置在:

target/test-resources/MyTest-testFoo/nested/dir/foo.txt
target/test-resources/MyTest-testFoo/bar.txt


這樣您的測試將把它們需要的資源複製到它們自己的獨立目錄中。此時,您可以從它們所屬的測試方法中修改這些測試資源,並且您的結果應該是冪等的,前提是它們僅依賴基於文件的資源而不依賴於其他類型的共享資源(資料庫、第三方服務等)。

在哪裡可以找到文檔

冪等項目的文件可以在這裡找到。

您可以查看概念概述,以獲取有關工作原理的更詳細說明。

如何貢獻

這是一個全新項目,核心功能和基礎設施已就位,但始終歡迎幫助。

具有 JUnit、Springframework、MkDocs 經驗的貢獻者可以透過一些出色的想法和解決方案來幫助塑造專案。也非常歡迎能夠提供回饋的嚐鮮者!

標記為 hacktoberfest 或需要幫助的問題可供爭奪,應該可以幫助您快速入門。你可以在這裡找到它們。

結論

編寫測試案例時最重要的事情之一是測試將使用的測試資料並在運行之間保持理智。透過遵循一組簡單的規則來保持測試之間的資料隔離,您可以實現結果的冪等性和可靠性。

carlspring/idempotence 專案提供了易於使用的框架,適用於新建專案和重構遺留專案。

版本聲明 本文轉載於:https://dev.to/carlspring/writing-parallelizable-tests-with-the-carlspringidempotence-framework-for-java-420n?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3