【问题标题】:Spock order tests by packages按包裹进行 Spock 订单测试
【发布时间】:2017-03-17 15:04:01
【问题描述】:

他,大家!我的测试是由 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 有解决方案,我可以使用包而不是每个类的枚举,因为我在其他许多包中有许多测试类。 在我使用跑步者之后

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");
      }
   }
} 

或者也许存在这个任务的更简单的解决方案。谢谢。

【问题讨论】:

    标签: java testing groovy spock


    【解决方案1】:

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

    以下 gradle sn -p 设置了 2 个不同的单元测试集/目录。使用命令gradle test integrationTest build src/integration 下的测试只有在 src/test 下的所有测试都通过时才会运行。

    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']
            }
        }
    }
    

    【讨论】:

    • 我所有的测试都放在一个包中。是的,经过一番尝试。我在 gradle 文件中添加了启动轮次。我在一个任务中添加了排除包,并在其他任务中只包含需要的包。并在此任务之间设置dependOn
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多