首页 > 解决方案 > 在自己的模块上为每个模块运行 spring boot 单元测试

问题描述

我们正在开发一个使用 Maven 进行依赖管理的 Spring-boot 应用程序。我们将项目分成几个modules不同的服务。

我有一些疑问,希望在这里得到一些见解和答案。

<modules>
    <module>app</module>
    <module>core</module>
    <module>firstlibrary</module>
    <module>firstlibraryservice</module>
    <module>secondlibrary</module>
    <module>secondlibraryservice</module>
</modules>

应用程序-> pom.xml

<dependencies>
    <dependency>
        <groupId>com.microservice</groupId>
        <artifactId>core</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.microservice</groupId>
        <artifactId>firstlibraryservice</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.microservice</groupId>
        <artifactId>firstlibrary</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.microservice</groupId>
        <artifactId>secondlibraryservice</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>com.microservice</groupId>
        <artifactId>secondlibrary</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc7</artifactId>
        <version>12.1.0.1</version>
    </dependency>


</dependencies>

将项目拆分为单个模块的主要目的是提高整个系统的弹性和可扩展性。我们将系统划分为不同的服务,对于每个服务,我们都有base module一个service module.

每个基础模块都可以根据自己的需要通过maven依赖访问其他服务,但不允许基础模块直接访问其他基础模块。

我们现在遇到的问题是,当我们在单个模块上进行错误修复或添加功能时,我们被迫在 app 模块上编写测试,该模块可以访问在其pommaven 文件中定义为依赖项的所有其他模块。

我认为我们在这里遇到了一个矛盾,因为使用微服务架构的主要原因是让我们尽可能独立于其他模块来开发和测试每个模块,而不是在整个应用程序级别上编写我们的测试。

现在,因为每个模块只能访问它的pom.xml依赖项中的模块,我们无法清理编译每个模块或在模块级别编写测试。

我的问题是如何在自己的模块上为每个模块运行单元测试,而不是在模块上编写所有测试app?(可以访问所有其他模块)

我希望我能在这里得到一些答案和建议。

标签: javamavenspring-bootmicroservicesdependency-management

解决方案


您的 POM 看起来很完美,并且可以正常工作。看看这篇博文:

https://info.michael-simons.eu/2018/06/18/maven-use-junit-5-with-spring-boot-for-unit-and-integration-tests/

你和你一样,你的项目必须毫无问题地运行,也许问题出在你项目的另一部分。

您可以使用此项目并与您的项目进行比较以找出问题:

https://github.com/GLinBoy/feader/tree/develop


推荐阅读