gpt4 book ai didi

java - 从元注释重写 ContextHierarchy 和 ContextConfiguration

转载 作者:行者123 更新时间:2023-12-01 12:41:25 32 4
gpt4 key购买 nike

我们有使用元注释的测试类:

@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 ,但我认为这并不能完全解决这种情况。

谢谢!

最佳答案

is there any mechanism in place to make this happen?

不,没有这样的机制支持这种配置风格。

可以使用自定义组合注释代替实际注释,不与实际注释结合使用。在核心 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 框架的作者)

关于java - 从元注释重写 ContextHierarchy 和 ContextConfiguration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25065849/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com