Spock 按包顺序测试
Spock order tests by packages
呵呵,各位!我的测试是来自 general 包的 jenkins 运行。我可以在将首先运行的 spock 中设置测试包吗?如果在此包中未通过任何测试,则应跳过其他测试。我看到这样的例子:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({TestJunit1.class, TestJunit2.class})
public class JunitTestSuite {
}
但也许 spock 有解决方案,我可以使用包而不是每个 类 的枚举,因为我在其他许多包中有很多测试 类。
在我使用 runner
之后
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
主线程没有停止。我不知道为什么。
我想做这样的事情:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({com.example.test.*.class})
public class JunitTestSuiteFirst {
}
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({com.example.otherTest.*.class, com.example.otherTests2.*.class})
public class JunitTestSuiteFirst {
}
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
if(result.wasSuccessful()){
JUnitCore.runClasses(JunitTestSuite.class);
}else {
System.out.println("Build failed");
}
}
}
或者可能存在此任务的更简单的解决方案。谢谢。
您可以在单元测试框架内解决的任何问题都不会很完美。这是因为单元测试应该是相互独立的,以这种心态不会对配置测试顺序提供强有力的支持。因此,最好的办法是在构建工具(Ant、Maven、Gradle 等)中寻找解决方案。
以下 gradle 代码段设置了 2 个不同的 sets/directories 单元测试。使用命令 gradle test integrationTest build
如果 src/test 下的所有测试都通过,则 src/integration 下的测试只会 运行。
sourceSets {
integrationTest {
java {
srcDirs = ['src/integration']
}
groovy {
srcDirs = ['src/integration']
}
resources.srcDir file('src/integration/resources')
}
test {
java {
srcDirs = ['src/test']
}
groovy {
srcDirs = ['src/test']
}
}
}
呵呵,各位!我的测试是来自 general 包的 jenkins 运行。我可以在将首先运行的 spock 中设置测试包吗?如果在此包中未通过任何测试,则应跳过其他测试。我看到这样的例子:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({TestJunit1.class, TestJunit2.class})
public class JunitTestSuite {
}
但也许 spock 有解决方案,我可以使用包而不是每个 类 的枚举,因为我在其他许多包中有很多测试 类。 在我使用 runner
之后import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
主线程没有停止。我不知道为什么。 我想做这样的事情:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({com.example.test.*.class})
public class JunitTestSuiteFirst {
}
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({com.example.otherTest.*.class, com.example.otherTests2.*.class})
public class JunitTestSuiteFirst {
}
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
if(result.wasSuccessful()){
JUnitCore.runClasses(JunitTestSuite.class);
}else {
System.out.println("Build failed");
}
}
}
或者可能存在此任务的更简单的解决方案。谢谢。
您可以在单元测试框架内解决的任何问题都不会很完美。这是因为单元测试应该是相互独立的,以这种心态不会对配置测试顺序提供强有力的支持。因此,最好的办法是在构建工具(Ant、Maven、Gradle 等)中寻找解决方案。
以下 gradle 代码段设置了 2 个不同的 sets/directories 单元测试。使用命令 gradle test integrationTest build
如果 src/test 下的所有测试都通过,则 src/integration 下的测试只会 运行。
sourceSets {
integrationTest {
java {
srcDirs = ['src/integration']
}
groovy {
srcDirs = ['src/integration']
}
resources.srcDir file('src/integration/resources')
}
test {
java {
srcDirs = ['src/test']
}
groovy {
srcDirs = ['src/test']
}
}
}