java如何将测试类包括到Maven jar中并执行它们?
在Maven项目中,我在同一个包中有测试类和源类,但在不同的物理位置
.../src/main/java/package/** <-- application code
.../src/test/java/package/** <-- test code
在测试类中访问源类没有问题,
但是我想在main方法中运行一个测试运行程序并访问AllTest.class
,这样我就可以创建jar并执行我的测试
public static void main(String[] args) {
// AllTest not found
Result result = JUnitCore.runClasses(AllTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
但是它不起作用,因为我没有访问测试代码的权限。我不明白,因为它们在同一个包裹里
问题:如何从应用程序类访问测试类?或者,Maven如何打包一个包含测试类的胖jar并执行测试
# 1 楼答案
您不应该从应用程序代码访问测试类,而是应该在测试范围中创建一个main(相同的main),并为您的项目创建一个额外的工件
但是,在这个附加工件(jar)中,您需要:
compile
范围内)test
范围内)这基本上意味着添加了测试类(及其依赖项)的胖罐子。{a1}及其{a2}目标不适合这一需要。{a3}及其{a4}选项也于事无补
那么,如何在Maven中创建一个包含测试类和外部依赖项的胖jar呢强>
在这种情况下,Maven Assembly Plugin是一个完美的候选者
以下是最低POM样本:
上面的配置是设置您在测试类中定义的主类。但这还不够
您还需要在
src\main\assembly
文件夹中创建一个descriptor file文件,其中包含以下内容:以上配置为:
test
范围获取的外部依赖项(这也将获取compile
范围)fileset
设置为包含已编译的测试类作为打包的fat jar的一部分fat-tests
分类器设置最终jar(因此最终文件类似于sampleproject-1.0-SNAPSHOT-fat-tests.jar
)李>然后可以按如下方式调用main(从
target
文件夹):从这样一个main中,您还可以调用所有测试用例,如下所示:
测试套件示例:
注意:在这种情况下,测试套件只涉及
AppTest
样本测试然后您可以有一个主类,如下所示:
然后,上面的main将执行测试套件,该套件将在链中执行所有配置的测试