java - 如何在 JUnit spring 测试中只 Autowiring 一个特定的类?

标签 java spring junit spring-test

我想写一种集成测试,但只针对特定类。 这意味着我希望自动连接该类中的所有字段,但忽略同一目录中的所有类。

这可能吗?

例子:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {TestConfig.class})
public class JunitTest {
    @Autowired
    private MyService service;
}

//how to only scan that specific class?
@ComponentScan(basePackageClasses = {MyService.class, MyInjectedService.class})
@Configuration
public class TestConfig {

}


@Service
public class MyService {
    @Autowired
    private MyInjectedService service;
}

在这里,我希望 spring 忽略与提到的两个 basePackageClasses 相同目录中的任何类。

最佳答案

@ContextConfiguration@SpringApplicationConfiguration 支持的classes 属性只需要引用带注释的类;它们不必是 @Configuration 类。

因此,考虑到这一点,您应该能够完全放弃组件扫描并简单地声明您的两个带注释的组件,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {MyService.class, MyInjectedService.class})
public class JUnitTest {
    @Autowired
    private MyService service;

    // ...
}

话虽如此,如果以上是您的目标,那么使用 Spring Boot 的测试支持可能没有任何意义。换句话说,如果 MyServiceMyInjectedService 不依赖于 Spring Boot 的任何特性,您可以安全地将 @SpringApplicationConfiguration 替换为 @上下文配置

问候,

Sam(Spring TestContext Framework 的作者)

关于java - 如何在 JUnit spring 测试中只 Autowiring 一个特定的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28560200/

相关文章:

java - MySQL (Java) 中的 str_to_date 错误

java - 如何创建调度程序以每晚 12:00 运行我的脚本- Selenium WebDriver

java - 在带有 void 返回类型的目标方法上的 Spring AOP 会跳过代码执行

java - JUnit 中的实例变量

java - 事件调度线程同步

java - 抽象类扩展返回类型

java - 通过继承将嵌套/递归 JSON 反序列化为 Java 对象

java - Spring @RequestParam 在表单数据中发送参数时为 null

java - 发现不兼容的类型 : required: default enums in annotations

scala - sbt 无法执行 JUnit 测试