我有一个多模块项目,其结构类似如下:
- server(包括应用程序上下文配置)和其他配置
- shared(由其他模块使用的实用程序类)
- service(具有各种存储库和服务的模块)
- transaction(处理事务的模块)
- 我需要为该项目编写测试,但我不能更改项目结构。我在我的transaction模块中创建了一个测试。
首先,我收到以下错误信息:
无法找到@SpringBootConfiguration,请使用@ContextConfiguration或@SpringBootTest(classes=...)与您的测试
我通过在测试文件夹中创建@Configuration文件来解决它,如下所示:
@Configuration
@ComponentScan("com.mohen")
public class TestConfig {
}
然后我在@SpringBootTest(TestConfig.class)
中使用了它。我可以自动装配,IDE没有显示任何错误标志。但是当我运行测试时,从服务模块尝试自动装配依赖项的另一个类会抛出NoSuchBeanDefinitionException。
如何解决这些问题?
应用程序的主配置文件如下所示
@SpringBootApplication(scanBasePackages = "com.mohen")
@EnableScheduling
@EnableAsync
@Import(value = {SSIpFilter.class, MainConfig.class})
public class Application extends SpringBootServletInitializer {...}
MainConfig.class 包含 componentScan 和 Import 注解。
如果我尝试在测试中导入 MainConfig.class,系统会建议我添加一个到服务器模块的依赖,但我不想这样做。
整个应用程序只使用一个属性文件(yml)。我的测试应该放在哪里?
编辑
我成功地运行了数据 JPA 测试和集成测试,但它会加载整个应用程序上下文。
现在的问题是:有些通常可以通过的测试在构建项目时 ./gradlew clean build
时失败。
我收到一些类中的
java.lang.NoClassDefFoundError
错误并在其他类中收到
Caused by: javassist.NotFoundException
错误。
我已经尝试添加 javaassist 库,但它仍然无效。您有什么想法吗?