嵌套测试跑步者

时间:2015-08-26 11:26:45

标签: unit-testing junit junit4

我试图找出是否以及如何嵌套JUnit测试运行器,例如合并GuiceJUnitRunnerParameterizedHierarchicalcontextRunner

对我而言,似乎JUnit并非旨在轻松实现此目的,否则BlockJUnit4ClassRunner应该有一个方法将下一个Runner作为参数传递。

有人还实施了一个ParallelParameterized亚军,我觉得组合ParallelParameterized并不容易。

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

1 个答案:

答案 0 :(得分:0)

有一种叫做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以获取更多信息