2015-08-26 97 views
0

我想知道是否以及如何嵌套JUnit测试跑步者,结合GuiceJUnitRunnerParameterizedHierarchicalcontextRunner嵌套测试跑步者

对我来说,JUnit似乎并不是为了实现这一点而设计的,否则BlockJUnit4ClassRunner应该有一个方法将下一个Runner作为参数传递。

有人还实施了一个ParallelParameterized亚军,这看起来像我结合ParallelParameterized是不容易的。

当为“嵌套”和“JUnit”搜索时,它提供了大量的嵌套类的信息,但我正在寻找嵌套Runner s,而不是类。

回答

1

有一种称为NestedRunner的方法,用于在嵌套配置中运行普通的旧Java类。

测试与@RunWith(NestedRunner.class)开始,这里要说的是,我发现的例子:

@RunWith(NestedRunner.class) 
public class ListTest { 

    // inner class for sharing common context 
    public class WithArrayList { 
     // some context for these tests 
     ArrayList<String> list = new ArrayList<String>(); 

     public class WhenEmpty { 
      @Test 
      public void itIsEmpty() { 
       assertTrue(list.isEmpty()); 
      } 

      public class AfterAddingAnElement { 
       // some more context for these tests 
       String element = "Element"; 
       // you can use instance initializer to initialize your context 
       // it will be run once per test 
       {        
        // the list is still empty in here 
        assertTrue(list.isEmpty()); 
        list.add(element); 
       } 

       @Test 
       public void itIsNotEmpty() { 
        assertFalse(list.isEmpty()); 
       } 

       @Test 
       public void itContainsTheElement() {    
        assertTrue(list.contains(element)); 
       } 

       @Test 
       public void addingAnotherElementIncreasesSize() { 
        int sizeBeforeAdding = list.size(); 
        list.add("AnotherElement"); 
        assertThat(list.size(), is(greaterThan(sizeBeforeAdding)));       
       } 

       @Test 
       public void listSizeIsStillOne() { 
        assertThat(list.size(), is(equalTo(1))); 
       } 
      } 

      @Test 
      public void isStillEmpty() { 
       assertTrue(list.isEmpty());    
      } 
     } 

     public class WithTwoElements { 
      @Before 
      public void init() { 
       list.add("Element1"); 
       list.add("Element2"); 
      } 

      @Test 
      public void hasSizeOfTwo() { 
       assertThat(list.size(), is(equalTo(2))); 
      } 
     } 
    } 
} 

这里是source进一步信息

+0

这个亚军是嵌套运行测试类。它不提供同时应用许多跑步者的选项。 @RunWith注释需要添加像@InnerRunners(GuiceJUnitRunner,ParameterizedRunner,HierarchicalcontextRunner)'来标识嵌套的参赛者。这不适用于您链接到的NestedRunner。 –