如果测试类和JUnit都在类路径上,可以从命令行运行JUnit测试,如下所示:
java org.junit.runner.JUnitCore TestClass1 TestClass2
现在,有没有办法在包(和子包)中运行所有测试?
我正在寻找像
这样的东西java org.junit.runner.JUnitCore com.example.tests.testsIWantToRun.*
有没有一种简单的方法(不涉及maven或蚂蚁)?
答案 0 :(得分:8)
Junit允许您定义suites个测试。每个套件都定义了一组测试,运行该套件会导致所有测试运行。我所做的是为每个包定义一个套件,列出该包的测试类以及任何子包的套件:
package com.foo.bar;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import com.foo.bar.baz.Suite_baz;
@RunWith(Suite.class)
@Suite.SuiteClasses({
ThisTest.class,
ThatTest.class,
TheOtherTest.class,
Suite_baz.class,
})
public class Suite_bar {
}
这不是完全没有用的。您必须构建套件并使用新的测试类手动更新它们。我想如果有人愿意的话,编写一个小程序来自动生成这些程序并不困难。
答案 1 :(得分:3)
我问这个问题是能够有选择性地对Jenkins的项目进行Cucumber测试,而不知道他们的RunTests类会被调用什么,他们的CucumberOptions将包含什么,或者它们将位于何处。我在此期间在StackOverflow上找到了一些有用的线程,它回答了我的问题:
使用这些,我可以按照以下方式单独进行黄瓜测试:
首先,我使用maven程序集插件将测试打包在jar中: https://stackoverflow.com/a/574650/2018047
然后我将测试的依赖项复制到Jenkins上的目标文件夹,如下所示: https://stackoverflow.com/a/23986765/2018047
我们已经有一个标志,它会在设置时跳过测试的执行,所以我打包我的测试而不运行它们:
mvn clean install -DskipMyTestModule=true
使用上面的代码和下面的调用,我将能够完成所有工作......
java -Dcucumber.options="src/test/resources/features --tags @b --format pretty:STDOUT --format html:target/cucumber-b --format json:target/cucumber-b.json" -Dname=value -cp target/artifact-1.2.8-SNAPSHOT-tests.jar;target/test-classes/libs/junit-4.11.jar;target/test-classes/libs/* org.junit.runner.JUnitCore com.example.foo.bar.test.cucumber.RunTest
希望这可以帮助将来的某个人。 :)
答案 2 :(得分:2)
使用JUnit 4,使用名为cpsuite的扩展名支持此功能。您需要做的就是将它添加到测试类路径(maven io.takari.junit:takari-cpsuite
),创建一个动态测试套件类:
package com.mycompany;
import org.junit.extensions.cpsuite.ClasspathSuite;
import org.junit.runner.RunWith;
@RunWith(ClasspathSuite.class)
@ClasspathSuite.IncludeJars(true)
public class RunAllTests {}
并运行它:
java -cp ${CP} org.junit.runner.JUnitCore com.mycompany.RunAllTests
您的类路径${CP}
应该包含您的测试jar,junit,hamcrest和cpsuite。