Aar*_*lla 6 unit-testing module maven
我有一个Maven项目,在其他项目中用作库.设置非常标准:src/main使用库代码,src/test带有测试用例src/main.
我们假设我有一个foo依赖于这个库的项目.foo还有测试用例.为了帮助编写foo使用我的库的代码的测试,我想提供foo一个支持框架来编写测试(比如设置一个模拟环境).
我在哪里可以提供此支持代码?
src/main因为它不打算投入生产.src/test因为从foo库的测试到库的测试创建依赖会给类路径添加太多垃圾(比如logback-test.xml配置文件,从未执行的测试,......).我可以将代码放入一个新模块,但它与代码紧密耦合src/main,所以我想将它保存在同一个项目中(也允许测试支持代码访问包私有字段和方法).
此外,代码src/test应该可以访问它,以便我可以使用它来编写我自己的单元测试.
什么是我与Maven选项,使这个在同一项目但仍清晰地从两个分开src/main和src/test?我可以以某种方式创建第三个输出JAR src/test-support吗?或者我应该将代码放入src/test,然后在JAR插件中使用过滤器仅包含支持代码?
下面是一个 POM 片段,它将主 JAR 分为普通工件和“JUnit 支持 JAR”:
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<excludes>
<exclude>**/junit/**</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>junit-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>junit</classifier>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<includes>
<include>**/junit/**</include>
</includes>
</configuration>
</execution>
<execution>
<id>test-jar</id>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
简而言之,它会查找junit名称中包含 的任何包并将其放入 JUnit JAR 中,将其从正常工件中排除。
如果普通罐子的坐标是
<groupId>com.group</groupId>
<artifactId>foo</artifactId>
Run Code Online (Sandbox Code Playgroud)
那么您只需添加以下内容即可获取 JUnit 支持代码<classifier>junit</classifier>:
<groupId>com.group</groupId>
<artifactId>foo</artifactId>
<classifier>junit</classifier>
Run Code Online (Sandbox Code Playgroud)
因此,要使用它,所依赖的 POMcom.group:foo将如下所示:
<dependency>
<groupId>com.group</groupId>
<artifactId>foo</artifactId>
<version>...</version>
</dependency>
<dependency>
<groupId>com.group</groupId>
<artifactId>foo</artifactId>
<version>...</version>
<classifier>junit</classifier>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
有时,您需要 JUnit 来编译“JUnit 支持 JAR”。如果是这种情况,请使用
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>compile</scope>
<optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)
将 JUnit 包含到构建中。这将使依赖项在编译时可用,但不会泄漏给其他任何人。
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |