gpt4 book ai didi

java - 如何创建和使用具有 Spring+JUnit 测试配置注释的自定义注释?

转载 作者:搜寻专家 更新时间:2023-10-31 20:29:44 25 4
gpt4 key购买 nike

我有大量使用 Spring Junit 支持运行的测试用例,每个测试都有以下注释。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")

我不想将所有这些注释都放在每个测试类上,而是想创建一个自定义注释并使用它。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring/applicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager")
@Transactional
@ActiveProfiles("test")

@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface SpringJUnit4TestConfig {

}

但是当我使用这个自定义注释时,Spring Injection 根本没有发生。

@SpringJUnit4TestConfig
public class UserServiceTest
{
}

我在这里缺少什么?

附言:但是JUnit的@RunWith和Spring的@Transactional,@ContextConfiguration都有@Inherited..所以我认为它应该可以工作。但是现在我通过变通来解决它。创建了一个 Based Abstract 类,并将所有这些 Annotations 和扩展该 Base 类的测试用例放在上面。

最佳答案

我认为这种方法行不通,因为 @RunWith 是 JUnit 注释,因此要使其起作用,JUnit 注释必须是可传递的。

When a class is annotated with @RunWith or extends a class annotated with @RunWith, JUnit will invoke the class it references to run the tests in that class instead of the runner built into JUnit. We added this feature late in development. While it seems powerful we expect the runner API to change as we learn how people really use it. Some of the classes that are currently internal will likely be refined and become public.

所以测试 JUnit 测试调用似乎只适用于继承的类。

至于Spring,它支持一个叫做context configuration inheritance的东西。对于配置位置, 我不太确定这是否适用于其他注释类型(如果您不这么认为,请指点我的文档) 实际上,这可能适用于其他注释类型测试配置类继承,因为在这种情况下,@Transactional 注释本身是用 @Inherited 声明的。

所以在这种情况下,它不会运行,因为缺少 JUnit 注释。

关于java - 如何创建和使用具有 Spring+JUnit 测试配置注释的自定义注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552705/

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