栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Maven jar中包含测试类并执行它们?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Maven jar中包含测试类并执行它们?

您不应从应用程序代码访问测试类,而应在测试范围中创建一个主体(相同的主体),并为您的项目创建一个附加工件。

但是,在此其他工件(罐子)中,您将需要具有:

  • 测试班
  • 应用程序代码类
  • 应用程序代码所需的外部依赖关系(在
    compile
    范围内)
  • 测试代码所需的外部依赖关系(在
    test
    范围内)

从根本上讲,这意味着增加了测试类(以及它们的依赖项),这是一个胖子。在Maven的Jar插件和它的

test-jar
目标将无法满足这一需求。在Maven的阴影插件和它的
shadeTestJar
方案不会也不帮助。

那么,如何在Maven中创建带有测试类和外部依赖项的胖子呢?

在这种情况下,Maven Assembly Plugin是一个理想的选择。

这是一个最小的POM示例:

<project>    <modelVersion>4.0.0</modelVersion>    <groupId>com.sample</groupId>    <artifactId>sample-project</artifactId>    <version>1.0-SNAPSHOT</version>    <build>        <plugins> <plugin>     <artifactId>maven-assembly-plugin</artifactId>     <version>2.3</version>     <configuration>         <descriptor>src/main/assembly/assembly.xml</descriptor>     </configuration>     <executions>         <execution>  <id>make-assembly</id>  <phase>package</phase>  <goals>      <goal>single</goal>  </goals>  <configuration>      <archive>          <manifest>   <mainClass>com.sample.TestMain</mainClass>          </manifest>      </archive>  </configuration>         </execution>     </executions> </plugin>        </plugins>    </build>    <dependencies>        <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope>        </dependency>    </dependencies></project>

上面的配置将设置您在测试类中定义的主类。但这还不够。

您还需要创建一个描述符文件,在

srcmainassembly
文件夹中包含
assembly.xml
以下内容的文件:

<assembly    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">    <id>fat-tests</id>    <formats>        <format>jar</format>    </formats>    <includebaseDirectory>false</includebaseDirectory>    <dependencySets>        <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>true</unpack> <scope>test</scope>        </dependencySet>    </dependencySets>    <fileSets>        <fileSet> <directory>${project.build.directory}/test-classes</directory> <outputDirectory>/</outputDirectory> <includes>     <include>**/*.class</include> </includes> <useDefaultExcludes>true</useDefaultExcludes>        </fileSet>    </fileSets></assembly>

上面的配置是:

  • 设置要从
    test
    范围中获取的外部依赖项(也将同时包含
    compile
    范围)
  • 设置一个,
    fileset
    以将已编译的测试类作为打包的胖子罐的一部分包括在内
  • 设置带有
    fat-tests
    分类器的最终jar (因此,最终文件将类似于
    sampleproject-1.0-SNAPSHOT-fat-tests.jar
    )。

然后,您可以从

target
文件夹中按以下方式调用main :

java -jar sampleproject-1.0-SNAPSHOT-fat-tests.jar

从这样的主体中,您还可以按以下方式调用所有测试用例:

  • 创建一个JUni测试套件
  • 将相关测试添加到测试套件中
  • 从普通的Java main调用测试套件

测试套件示例:

import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;@RunWith(Suite.class)@SuiteClasses({ AppTest.class })public class AllTests {}

注意:在这种情况下,测试套件仅涉及

AppTest
样本测试。

然后您可以拥有一个如下的主类:

import org.junit.internal.TextListener;import org.junit.runner.JUnitCore;public class MainAppTest {    public static void main(String[] args) {        System.out.println("Running tests!");        JUnitCore engine = new JUnitCore();        engine.addListener(new TextListener(System.out)); // required to print reports        engine.run(AllTests.class);    }}

然后,上面的main将执行测试套件,该套件将连锁执行所有已配置的测试。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485716.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号