最終的に、実際にこれを直接行う方法を見つけました。少し面倒ですが、実際にはそれほど悪くはありません。
もともと、テストは @ContextConfiguration で実行され、後で @Before で初期化さnew TestContextManager(getClass()).prepareTestInstance(this);
れました (Spring 以外のランナーを使用できるように個別に初期化されました)。
これを拡張して、TestContext が使用可能になるたびに TestContext をテスト自体に取得するテキスト実行リスナーを最初に登録しました。
contextManager.registerTestExecutionListeners(new AbstractTestExecutionListener() {
@Override
public void prepareTestInstance(TestContext freshTestContext) throws Exception {
testContext = freshTestContext;
}
});
テスト自体は、プロパティの実際の値が何であるかを知ると(残念ながら実際のテストまでではありません)、カスタム PropertyPlaceholderConfigurer にプロパティを挿入します(非常に単純です:resolvePlaceholderをオーバーライドし、以前にプロパティを明示的に設定していない限り、super.resolvePlaceholderを呼び出します)。 、および呼び出し:
testContext.markApplicationContextDirty();
contextManager.prepareTestInstance(this);
これにより、新しく変更されたプロパティ値を使用して、TestContext がアプリケーション コンテキストを再構築します。
最後に、テスト間でプロパティをリセットし、おそらくクラス全体を @DirtiesContext としてマークして、他のテストに干渉しないようにする必要があります。