Spring Boot多模块项目中的单元测试

3

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

  • 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 库,但它仍然无效。您有什么想法吗?


你的项目结构和所有注释的解释都很混乱,我们无法清晰地了解你的结构。这可能就是为什么你会出现这些错误的原因,因为结构很杂乱。除非你能够展示实际的结构和所有注释,或者提供一个最小化的可工作示例,否则你可能就没有什么希望了。 - Toerktumlare
https://stackoverflow.com/questions/61058907/gradle-fails-to-build-at-test这是链接,先生。 - Mohendra Amatya
1个回答

0
我找到了我的问题的解决方法。由于项目是多模块的,其他模块无法识别类和包。我在模块的build.gradle文件中进行了一些更改。
testRuntime project(':shared')

我在依赖项中添加了上述内容,并且还添加了


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

该jar文件创建一个简单的非可执行jar文件,而bootRepackage禁用了可执行jar文件的创建,默认情况下它是可执行的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接