我们使用元注释测试类:
@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,但我认为这不是解决这种情况的原因。
谢谢!
答案 0 :(得分:1)
是否有任何机制可以实现这一目标?
不,没有支持这种配置风格的机制。
自定义组合注释可以使用代替实际注释,不与实际注释结合使用。在核心Spring框架中也是如此(可能@Profile
和@Conditional
除外)。
换句话说,您无法在同一个类中声明@ContextConfiguration
和另一个使用@ContextConfiguration
进行元注释的注释(例如,您的@BaseSpringTest
)。如果你这样做,你会发现Spring只能找到其中一个声明。
但是,如果引入基类,则可以实现目标(尽管需要扩展该基类):
@BaseSpringTest
public abstract class AbstractBaseTests extends AbstractTestNGSpringContextTests {
// ...
}
@ContextConfiguration(locations = {"/web/WEB-INF/spring-extension.xml" }, name = "parent")
public class MyTest extends AbstractBaseTests {
// ...
}
当然,如果您要使用“基类”路线,那么自定义组合注释可能对您没那么有用。
此致
Sam(Spring TestContext Framework的作者)