我必須將測試從JUnit 4遷移到JUnit 5,我必須使用@Rule來設置EnvironmentVariables變量。在Junit 4中,為每個測試清除了變量,在JUnit 5中,我需要相同的行為,因為現在正在運行的測試是分別傳遞的,但是當我從類中運行所有測試時,第二個測試將失敗,因為仍然具有相同的環境變量。我有:@Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables();@Testvoid method1(){...}@Testvoid method2(){...}我對Junit 5尚不熟悉,因此在此先感謝您的幫助
3 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
你有沒有@Rule
JUnit 4中應做與Extension
在JUnit的5提供了一個非常緊密的功能
所以,你可以創建例如分機EnvironmentVariablesExtension
所執行你的邏輯@Rule
,并通過注釋您的測試類使用它在你的單元測試(ES)@ExtendWith(EnvironmentVariablesExtension.class)
。
請注意,如果@Rule
在單個單元測試類中使用單個,則可以將此邏輯移入@BeforeEach
每次運行測試之前調用的lifecyle方法。
如果只有幾個類setup
在單個項目中使用此類,則仍可以引入一個抽象基測試類,該抽象基測試類在@BeforeEach
方法中進行此設置,并使單元測試類繼承自該基類。
的最大價值之一@Rule
是當您要為單元測試定義多個規則時,或者要在其他應用程序/項目中重用規則時。并非如此,不要像Extension
在JUnit5中那樣引入它們并保持目前的簡單性。

Qyouu
TA貢獻1786條經驗 獲得超11個贊
我認為您的關鍵字存在問題final
。刪除它,它應該可以工作,
嘗試這樣:
@Rule public EnvironmentVariables environmentVariables = new EnvironmentVariables();
final =定義只能分配一次的實體
所以從我的角度來看,這困擾著您。
添加回答
舉報
0/150
提交
取消