2017-05-18 116 views
5

根據JUnit 5 User Guide,JUnit Jupiter爲某些JUnit 4規則提供向後兼容性,以幫助進行遷移。JUnit 5中等效的ExternalResource和TemporaryFolder是什麼?

如上所述,JUnit Jupiter本身並不會也不會支持JUnit 4規則。然而,JUnit團隊意識到,許多組織,尤其是大型組織,很可能擁有包括自定義規則在內的大型JUnit 4代碼庫。爲了爲這些組織提供服務並實現逐步遷移路徑,JUnit團隊已決定在JUnit Jupiter中逐字支持選擇JUnit 4規則。

該指南繼續說,其中一個規則是ExternalResource,它是TemporaryFolder的父項。

然而,引導可惜不下去再說遷移路徑是什麼,或者什麼相當於是爲那些編寫新的JUnit 5次測試。那麼我們應該使用什麼?

回答

1

Interesting article by author of TemporaryFolderExtension for JUnit5

his code repo on github

JUnit5.0.0現在是通用版本讓我們希望他們將注意力轉向做實驗的東西生產就緒。

同時,似乎TemporaryFolder規則將仍然JUnit5工作docs

使用本:

@EnableRuleMigrationSupport 
public class MyJUnit5Test { 

這:

<dependency> 
    <groupId>org.junit.jupiter</groupId> 
    <artifactId>junit-jupiter-migrationsupport</artifactId> 
    <version>5.0.0</version> 
</dependency> 
0

據我的理解,可以有從ExternalResource到JUnit5中的等效項之間沒有一對一映射。這些概念不適合。在JUnit4中,ExternalResource基本上給你一個before和一個after回調,但在規則中,你不能控制beforeafter的實際含義。您可以將它與@Rule@ClassRule一起使用。

在JUnit5,延伸被定義在特定extension points並且因此「何時」被很好地定義鉤。

在概念的另一個區別是,你可以在JUnit4規則的狀態,但你的JUnit5擴展不應該有任何的狀態。相反,所有州應該去execution context

儘管如此,這裏是我走過來一個選項,其中beforeafter涉及到每個測試方法:

public abstract class ExternalResourceExtension 
    implements BeforeTestExecutionCallback, AfterTestExecutionCallback { 
    @Override 
    public void beforeTestExecution(ExtensionContext context) throws Exception { 
     before(context); 
    } 

    @Override 
    public void afterTestExecution(ExtensionContext context) throws Exception { 
     after(context); 
    } 

    protected abstract void before(ExtensionContext context); 

    protected abstract void after(ExtensionContext context); 
} 
相關問題