3

@RuleJUnit4 で作成したようなカスタム拡張機能を作成することは可能ですか?

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)今できると思いますか?

編集: @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());
    }
}
4

1 に答える 1

3

はい。Junit5 でカスタム拡張機能を作成することができます。実際、それ@ExtendWithが意図されているものです:

特定のクラスとそのサブクラスのすべてのテストのカスタムを登録するYourExtensionには、次のようにテスト クラスに注釈を付けます。

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

の例は、BeforeAllCallbackspring -framework にあります。AfterAllCallback


次のように、複数の拡張機能をまとめて登録できます。

@ExtendWith({ YourExtension1.class, YourExtension2.class })
class YourTests {
于 2017-09-13T10:49:32.270 に答える