当测试包含 JUnit @Test 注释且没有 main class 时如何创建 Maven Jar 文件

How to create Maven Jar file when tests contain JUnit @Test annotations and no main class

我在一个包下存储了 3 个测试,它们都利用了 JUnit @Test 注释。我在项目中没有 main class。当然,我可以去 运行 As > Maven Test 并且所有 3 个测试都将被执行。

我使用 Install 命令创建了一个 Jar 可执行文件,但是当我尝试 运行 Jar 文件时,我收到消息 - "No main manifest attribute" 消息。

在 Maven 中处理这个问题的解决方案是什么?

我知道在 Gradle 中,您不需要 main class 到 运行 Jar 可执行文件。

或者,我是否需要创建一个 main class 包含这样一个 main 方法:

public static void main(String[] args){
List tests = new ArrayList();
tests.add(TestOne.class);
tests.add(TestTwo.class);

for (Class test : tests){
    runTests(test);
}
}

private static void runTests(Class test){
Result result = JUnitCore.runClasses(test);
for (Failure failure : result.getFailures()){
    System.out.println(failure.toString());
}
}

然而,这种感觉对我来说是违反直觉的。

生成test-jar

您可以将其添加到您的 pom.xml 中以生成包含所有测试的 jar:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <goals>
                <goal>test-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

执行测试class

然后,以这种方式执行测试:

java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \ 
     junit.textui.TestRunner com.xyz.SomeTest

您需要在 -cp 参数中添加所有需要的依赖项。

测试套件

每个测试都必须一个接一个地执行,但您可以create a testSuite,因此您可以使用一个命令轻松执行所有测试:

@RunWith(Suite.class)
@Suite.SuiteClasses({
        SomeTest.class,
        SomeOtherTest.class
})
public class SuiteAbcTest {
    //normally, this is an empty class
}

并执行测试套件:

java -cp yourproject-1.0.0-tests.jar:junit-4.12.jar:otherdependencies.jar \ 
     junit.textui.TestRunner com.xyz.SuiteAbcTest