2017-09-13 13 views
2

JUnit4で@Ruleを作成したようなカスタムエクステンションを作成することはできますか?カスタムJUnit5エクステンションの作成方法

public class MockMetadataServiceRule extends ExternalResource { 
    @Override 
    protected void before() throws Throwable { 
     //some setup 
    } 

    @Override 
    protected void after() { 
     // some teardown 
    } 
} 

その後、私はJUnit5

@BeforeAll 
public static void init() { 
    MetadataServiceFactory.setService(MockitoMockMetadataService.getMock()); 
} 

@AfterAll 
public static void teardown() { 
    MetadataServiceFactory.setService(null); 
} 

でテストクラス内でこれを行うことができますが、私はすることができます@ExtendWith(MyExtension.class)今推測しますか?

EDIT: @nullpointerリンクが消えた場合の私の拡張の例。ありがとう。

public class MockMetadataServiceExtension implements BeforeAllCallback, AfterAllCallback { 

    @Override 
    public void afterAll(ExtensionContext extensionContext) throws Exception { 
     MetadataServiceFactory.setService(null); 
    } 

    @Override 
    public void beforeAll(ExtensionContext extensionContext) throws Exception { 
     MetadataServiceFactory.setService(MockitoMockMetadataService.getMock()); 
    } 
} 

答えて

2

はい。 Junit5にcustom extensionsを作成することは可能です。以下のために意図されているもの@ExtendWithある事実: は、次のようにすべての特定の クラスのテストとそのサブクラスのカスタムYourExtensionを登録するには

、あなたはテストクラスに注釈を付けます。 BeforeAllCallback FO

@ExtendWith(YourExtension.class) 
class YourTests { 
    // ... 
} 

たとえば、AfterAllCallbackは、複数の拡張子は次のようにまとめて登録することができspring-framework.


で見つけることができます

@ExtendWith({ YourExtension1.class, YourExtension2.class }) 
class YourTests { 
+1

@LazerBanana答えの例をリンクしました。 – nullpointer

+1

私はクラスに複数の拡張機能を持つことができますか? – LazerBanana

+1

@LazerBananaはい、カンマをリスト形式で区切って指定することができます。 – nullpointer

関連する問題