You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot2升级3后测试上下文‘Failed to introspect class’问题解决

解决Spring Boot 3升级后测试上下文加载时javax.activation.DataSource找不到的问题

方案1:添加javax.activation兼容测试依赖

原库的DefaultEmailService依赖旧的javax API,测试阶段类加载会缺失该类,直接在构建工具中添加测试范围的依赖即可,不会影响主应用的Jakarta环境:

Maven

<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
    <scope>test</scope>
</dependency>

Gradle

testImplementation 'javax.activation:activation:1.1.1'

方案2:在测试上下文排除原库自动配置类

如果不想引入javax依赖,可以找到it.ozimov库中注册defaultEmailService的自动配置类,在@SpringBootTest中排除它,避免Spring加载原库的DefaultEmailService类:

@SpringBootTest(exclude = {OzimovSpringBootFreemarkerEmailAutoConfiguration.class})
public class YourTestClass {
    // 测试代码
}

注:若不清楚具体自动配置类名,可查看原库的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,或通过日志打印自动配置加载情况定位目标类。

方案3:测试配置中覆盖原Bean并移除原Bean定义

创建测试专用配置类,注册自己重写的EmailService并标记为@Primary,同时移除原库的defaultEmailService Bean定义:

@TestConfiguration
public class TestEmailConfig implements BeanFactoryPostProcessor {

    @Primary
    @Bean
    public EmailService customEmailService() {
        // 返回你重写的EmailService实现
        return new YourCustomEmailService();
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
        if (registry.containsBeanDefinition("defaultEmailService")) {
            registry.removeBeanDefinition("defaultEmailService");
        }
    }
}

在测试类中引入该配置:

@SpringBootTest
@Import(TestEmailConfig.class)
public class YourTestClass {
    // 测试代码
}

内容的提问来源于stack exchange,提问作者Joan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:38