首页 > 解决方案 > 在专用网络中用于单元测试的内存 mongo 数据库

问题描述

我有一个Mongo用作数据库的 java/spring-boot/maven 项目。我想为这个项目创建一些测试(单元测试和集成测试),它们可以在干净的机器上运行。为了解决这个问题,我开始在内存中寻找 mongo 数据库,它只适用于单元测试。

我找到了 Flapdoodle,它在我的本地机器上按预期工作。我可以在没有整个 Mongo 设置的情况下运行我需要的测试。但是,它会下载EmbeddedMongo,这是在官方构建机器上无法完成的(持续集成),因为它运行在私有网络中,无法下载。

EmbeddedMongo由于它仅在第一次尝试下载,我想 - 也许如果我手动将文件夹.embedmongo放在构建机器上,它就不需要从无法访问的服务器下载它。因此,我尝试使用Flapdoodle 的 github 上建议的embedmongo-maven-plugin配置它阅读我。我尝试在本地 Windows 机器上创建一个不会下载它的配置(下面的 pom.xml 代码),方法是创建一个单独的文件夹并告诉它寻找不同的文件夹,但它总是尝试下载它(确实不要寻找其他文件夹)。

我肯定在这里遗漏了一些东西......你能帮我吗?

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mycompany.root</groupId>
    <artifactId>project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>project</name>
    <description>My Project</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>2.1.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <version>2.2.0</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.github.joelittlejohn.embedmongo</groupId>
                <artifactId>embedmongo-maven-plugin</artifactId>
                <version>0.4.1</version>
                <executions>
                    <execution>
                        <id>start</id>
                        <goals>
                            <goal>start</goal>
                        </goals>
                        <configuration>
                            <randomPort>true</randomPort>
                            <!-- optional, default is false, if true allocates a random port and overrides embedmongo.port -->

                            <databaseDirectory>C:/dev</databaseDirectory>
                            <!-- optional, default is a new dir in java.io.tmpdir -->

                        </configuration>
                    </execution>
                    <execution>
                        <id>stop</id>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

我真的不确定我是否走在正确的道路上 -embedmongo-maven-plugin这里似乎没有任何区别......我可以使用另一个内存数据库解决方案,但 Flapdoodle 似乎是最简单的一个,这就是为什么我目前正在尝试使用它。

- 编辑 -

我刚刚尝试了其他建议的插件,如下所示:

            <plugin>
                <groupId>com.syncleus.maven.plugins</groupId>
                <artifactId>maven-mongodb-plugin</artifactId>
                <version>1.1.1</version>
                <executions>
                    <execution>
                        <id>start</id>
                        <goals>
                            <goal>start</goal>
                        </goals>
                        <configuration>

                            <artifactDirectory>C:/dev/.embedmongo</artifactDirectory>
                            <!-- optional, set directory where MongoDB artifacts are stores,
                                 default is ~/.embedmongo -->


                        </configuration>
                    </execution>
                    <execution>
                        <id>stop</id>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

但是,它似乎根本不起作用 - 即使我只是添加没有配置(默认运行),它在本地运行(在开放网络中)失败。我想知道是否还有其他选择...

标签: javamongodbmavenunit-testingin-memory-database

解决方案


推荐阅读