java - 在专用网络中用于单元测试的内存 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>
但是,它似乎根本不起作用 - 即使我只是添加没有配置(默认运行),它在本地运行(在开放网络中)失败。我想知道是否还有其他选择...
解决方案
推荐阅读
- gradle - 在 gRPC java 项目中导入文件
- sql - 如何在 Where 子句条件中编写动态删除条件
- apache - Kubernetes/OC ConfigMap 与 git 中的 config 和容器中的进程以观察变化
- c# - WPF ComboBox 忽略禁用的选定项更新
- perl - 从 zip 存档中提取包含日语字符的文件
- ubuntu - geth 使用智能合约备份/恢复添加到区块链的数据
- android-cts - 面临 CTS 错误
- jquery - 一个选项卡的内容未正确显示
- http - 如何在 go fasthttp 中添加自定义 http 标头?
- ruby - 如何在类之外使用 Minitest 断言?