2012-11-28 149 views
2

我看過所有類似的問題,但在我看來,他們都沒有給出一個堅實的答案。我有一個測試類(JUnit 4,但也對JUnit 3感興趣),我想以編程方式/動態方式(而不是從命令行)從這些類中運行單個測試方法。說,有5個測試方法,但我只想運行2.我怎樣才能以編程方式/動態(而不是從命令行,Eclipse等)實現這一點。如何在JUnit 4測試類中運行單個方法?

此外,在測試類中有一個@Before帶註釋的方法。所以,當運行單獨的測試方法時,@Before也應該預先運行。這怎麼能克服?

在此先感謝。

回答

2

這是一個簡單的一個方法亞軍。它基於JUnit 4框架,但可運行任何方法,不一定用@Test註釋

private Result runTest(final Class<?> testClazz, final String methodName) 
      throws InitializationError { 
     BlockJUnit4ClassRunner runner = new BlockJUnit4ClassRunner(testClazz) { 
      @Override 
      protected List<FrameworkMethod> computeTestMethods() { 
       try { 
        Method method = testClazz.getMethod(methodName); 
        return Arrays.asList(new FrameworkMethod(method)); 

       } catch (Exception e) { 
        throw new RuntimeException(e); 
       } 
      } 
     }; 
     Result res = new Result(); 
     runner.run(res); 
     return res; 
    } 

    class Result extends RunNotifier { 
     Failure failure; 

     @Override 
     public void fireTestFailure(Failure failure) { 
      this.failure = failure; 
     }; 

     boolean isOK() { 
      return failure == null; 
     } 

     public Failure getFailure() { 
      return failure; 
     } 
    } 
0

我認爲這隻能用自定義TestRunner來完成。啓動測試時,您可以傳遞您希望作爲參數運行的測試的名稱。更有趣的解決方案是實現自定義註釋(可以說@TestGroup),它將組名稱作爲參數。你可以用它來註釋你的測試方法,給你想要一起運行相同組名的測試。同樣,在啓動測試時將組名稱作爲參數。在您的測試運行程序中,只收集具有相應組名稱的那些方法並啓動這些測試。

然而,這個最簡單的辦法是將要單獨運行到另一個文件中的那些測試...

相關問題