Spock按包测试顺序

V.T*_*sto 5 java testing groovy spock

他,大家好!我的测试是由jenkins从一般包中运行的.我可以在spock中设置测试包,它将首先运行,如果在此包中不通过任何测试,则应跳过其他测试.我看到这样的例子:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;    
@RunWith(Suite.class)    
@Suite.SuiteClasses({TestJunit1.class, TestJunit2.class})    
  public class JunitTestSuite {   
  }  
Run Code Online (Sandbox Code Playgroud)

但也许spock有解决方案,我可以使用包而不是每个类的枚举,因为我在其他很多包中有很多测试类.在我使用跑步者之后

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());
   }
} 
Run Code Online (Sandbox Code Playgroud)

主线不会停止.我不知道为什么.我想做那样的事情:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;    
@RunWith(Suite.class)    
@Suite.SuiteClasses({com.example.test.*.class})    
   public class JunitTestSuiteFirst {   
   }  
Run Code Online (Sandbox Code Playgroud)
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 {   
    }  
Run Code Online (Sandbox Code Playgroud)
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");
      }
   }
} 
Run Code Online (Sandbox Code Playgroud)

或者可能存在更简单的解决方案.谢谢.

Sci*_*hod 0

您可以在单元测试框架内完成的任何事情都不会很漂亮。这是因为单元测试应该是相互独立的,在这种心态下,配置测试顺序就不会得到强有力的支持。因此,最好的选择是在构建工具(Ant、Maven、Gradle 等)中寻找解决方案。

以下 gradle 片段设置了 2 个不同的单元测试集/目录。使用该命令,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']
        }
    }
}
Run Code Online (Sandbox Code Playgroud)