多模块 spring 引导项目中的单元测试

Unit test in multi-module spring boot project

我有一个多模块项目,结构如下:

首先我得到了

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

我通过在测试文件夹中创建一个 @Configuration 文件解决了这个问题

@Configuration
@ComponentScan("com.mohen")
public class TestConfig {
}

然后我在 @SpringBootTest(TestConfig.class) 中使用它。我能够自动装配, IDE 没有显示任何错误迹象。但是当我 运行 我的测试时,我从另一个 class 试图从服务模块自动装配依赖项得到 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)。我应该在哪里保存我的 属性 测试文件?

编辑

我设法 运行 测试,一个 dataJpaTest 和一个集成测试,但它加载了整个应用程序上下文。

现在的问题是,正常通过的测试,在我构建项目时失败了 ./gradlew clean build

我明白了

java.lang.NoClassDefFoundError

在某些 class 和

Caused by: javassist.NotFoundException

其他

我试过添加 javaassist 库,但它不起作用。

有什么想法吗?

我找到了问题的解决方案。由于项目是多模块的,类 和包没有被其他模块识别。 我对模块的 build.gradle 文件进行了一些更改。

testRuntime project(':shared')

我在依赖中添加了上面的,还添加了

jar {
    enabled = true
}
bootRepackage{
    enabled = false
}

jar 创建一个简单的不可执行的 jar 文件,而 bootRepackage 禁止创建可执行的 jar 文件,默认情况下这是它的本性。