JUnit5 中的 @AutoClose 擴充指南
瀏覽人數:127最近更新:
1. 概述
在這個簡短的教程中,我們將探索新的@AutoClose
JUnit 5 註釋,它幫助我們處理在測試執行後需要特定方法呼叫的類別。
之後,我們將學習如何使用此擴充功能來簡化我們的測試並從@AfterAll
塊中刪除樣板程式碼。
2. @AutoClose
擴展
在測試中,存在這樣的場景:某些類別需要在測試完成後執行特定的操作。例如,當我們有實作AutoCloseable
介面的測試依賴項時,通常會出現這種情況。出於演示目的,讓我們建立自訂AutoCloseable
類別:
class DummyAutoCloseableResource implements AutoCloseable {
// logger
private boolean open = true;
@Override
public void close() {
LOGGER.info("Closing Dummy Resource");
open = false;
}
}
當我們完成執行測試時,我們使用@AfterAll
塊關閉資源:
class AutoCloseableExtensionUnitTest {
static DummyAutoCloseableResource resource = new DummyAutoCloseableResource();
@AfterAll
static void afterAll() {
resource.close();
}
// tests
}
然而,**從 JUnit5 版本 5.11 開始,我們可以使用@AutoClose
擴充功能來消除樣板程式碼**。該擴充功能已整合到 JUnit5 框架中,因此我們不需要在類別層級添加任何特殊註解。相反,我們可以使用@AutoClose
註解該欄位:
class AutoCloseableExtensionUnitTest {
@AutoClose
DummyAutoCloseableResource resource = new DummyAutoCloseableResource();
// tests
}
正如我們所看到的,這也消除了聲明欄位static
的限制。此外,**附註解的欄位不一定必須實作AutoCloseable
介面**。預設情況下,擴充功能會尋找已註解的欄位內部並嘗試尋找名為「 close
」的方法,但我們可以自訂並指向不同的函數。
讓我們考慮另一個用例,當我們完成資源的處理時,我們想要呼叫clear()
方法:
class DummyClearableResource {
// logger
public void clear() {
LOGGER.info("Clear Dummy Resource");
}
}
在這種情況下,我們可以使用註解的值來指示在所有測試之後需要呼叫哪個方法:
class AutoCloseableExtensionUnitTest {
@AutoClose
DummyAutoCloseableResource resource = new DummyAutoCloseableResource();
@AutoClose("clear")
DummyClearableResource clearResource = new DummyClearableResource();
// tests
}
三、結論
在這篇簡短的文章中,我們討論了新的@AutoClose
擴充並將其用於實際範例。我們探討了它如何幫助我們保持測試簡潔並管理需要關閉的資源。
與往常一樣,本文中使用的所有程式碼範例都可以在 GitHub 上找到。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議