2015-11-04 47 views
0

我想爲我們公司的一些常見使用案例(例如Google Guave針對集合)創建測試套件生成器。針對TestSuites的未通過測試的測試

所以我創建了我的構建器,以及一些擴展TestSuiteTestCase的類,如果需要,它們會被添加。但是運行在Eclipse中的一切(火星4.5.1 - 不判斷)顯示測試爲「無根試驗」,並認爲不能將它們標記爲成功要麼失敗也不:

JUnit View

帶來的Maven以下例外(但它是Maven,我可以刻錄該橋,但我不相信它與上面有任何關係):

[錯誤]未能執行目標org.apache .maven.plugins:maven-surefire-plugin:2.18.1:項目org.acme.project上的測試(默認測試)目標org.apache.maven.plugins的執行默認測試:maven-surefire-plugin:2.18。 1:測試輝導致:有在叉形過程中出現錯誤

Other questions狀態,這是由於使用JUnit 4 JUnit的3類TestCase(未棄用,因此...),在這種情況下的問題是:如何將此代碼轉換爲JUnit 4?

@RunWith(Suite.class) 
@Suite.SuiteClasses({ MyTest.Suite.class }) 
public class MyTest { 

    public static class Suite { 

     public static TestSuite suite() { 
      final TestSuite suite = new TestSuite("My Test Suite"); 
      suite.addTest(new CompoundTester(value -> new MyTester(value), "A", "B")); 
      return suite; 
     } 
    } 

    public static class CompoundTester extends TestSuite { 

     public CompoundTester(final Function<String, TestCase> testFactory, final String... values) { 
      String name = "unknown"; 
      for (final String value : values) { 
       final TestCase testCase = testFactory.apply(value); 
       name = testCase.getName(); 
       addTest(new TestCase(value.toString()) { 

        @Override 
        public void run(final TestResult result) { 
         testCase.run(result); 
        } 
       }); 
      } 
      setName(name); 
     } 
    } 

    public static class MyTester extends TestCase { 

     private final String object; 

     public MyTester(final String object) { 
      super("testSomething"); 
      this.object = object; 
     } 

     public void testSomething() { 
      Assert.assertNotNull(this.object); 
     } 

    } 
} 

回答

0

它的工作原理,如果匿名TestCase類的run方法是這樣的:

@Override 
public final void run(final TestResult result) { 
    result.startTest(this); 
    result.runProtected(this,() -> testCase.run()); 
    result.endTest(this); 
} 

不知道爲什麼,雖然。