2017-03-17 72 views
5

他,大家好!我的測試由jenkins從一般軟件包運行。我可以在spock中設置測試包,它將首先運行,如果在此包中不會通過任何測試,則應該跳過其他測試。我見過這樣的例子:Spock按包定單測試

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

但也許斯波克有解決方案,我可以用包,而不是每個類的枚舉,因爲我有在其他許多包許多測試類。 後還我用轉輪

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

或者,也許存在這個任務更簡單的解決方案。謝謝。

回答

0

任何你可以在你的單元測試框架內工作的東西都不會很漂亮。這是因爲單元測試應該是彼此獨立的,這種思維模式不會對配置測試順序提供強有力的支持。因此,您最好的選擇是在構建工具(Ant,Maven,Gradle等)中尋找您的解決方案。

下面的gradle代碼段設置了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'] 
     } 
    } 
} 
+0

我所有的測試都位於一個包中。是的,經過一番嘗試。我在gradle文件中添加了開始輪流。我在一個任務中爲包添加了排除功能,並且僅在其他任務中包含了所需的程序包。並在這些任務之間設置dependsOn –