0

メタアノテーションを使用したテスト クラスがあります。

@WebAppConfiguration
@ContextHierarchy({
    @ContextConfiguration(locations = {"/web/WEB-INF/spring.xml" }, name = "parent"),
    @ContextConfiguration("/web/WEB-INF/spring-servlet.xml")
})
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface BaseSpringTest {
}

ただし、テストクラス自体から階層の要素をオーバーライドまたは追加できるようにしたいと考えています。たとえば、次のようになります。

@BaseSpringTest
@ContextConfiguration(locations = {"/web/WEB-INF/spring-extension.xml" }, name = "parent")
public class MyTest extends AbstractTestNGSpringContextTests {
    ...
}

これはこれまでのところうまくいきませんでした...これを実現するためのメカニズムはありますか? https://jira.spring.io/browse/SPR-11038を見つけましたが、この種の状況の完全な修正ではないと思います。

ありがとう!

4

1 に答える 1

1

これを実現するためのメカニズムはありますか?

いいえ、このスタイルの構成をサポートするメカニズムはありません。

カスタム構成の注釈は、実際の注釈と組み合わせてではなく、実際の注釈の代わりに使用できます。これは、Spring Framework のコア全体に当てはまります (おそらくと を除く)。@Profile@Conditional

つまり、同じクラス@ContextConfigurationで とメタアノテーションが付けられた別のアノテーション@ContextConfiguration(たとえば、 your ) を宣言することはできません。@BaseSpringTestその場合、Spring はそれらの宣言の 1 つだけを見つけることがわかります。

ただし、基本クラスを導入すると、目標を達成できます (ただし、その基本クラスを拡張する必要があります)。

@BaseSpringTest
public abstract class AbstractBaseTests extends AbstractTestNGSpringContextTests {
    // ...
}

@ContextConfiguration(locations = {"/web/WEB-INF/spring-extension.xml" }, name = "parent")
public class MyTest extends AbstractBaseTests {
    // ...
}

もちろん、「基本クラス」ルートを使用している場合、カスタム構成の注釈はおそらくそれほど役に立ちません。

よろしく、

サム (Spring TestContext フレームワークの作成者)

于 2014-08-02T21:02:43.500 に答える