我试图找出是否以及如何嵌套JUnit测试运行器,例如合并GuiceJUnitRunner,Parameterized和HierarchicalcontextRunner。
对我而言,似乎JUnit并非旨在轻松实现此目的,否则BlockJUnit4ClassRunner应该有一个方法将下一个Runner
作为参数传递。
有人还实施了一个ParallelParameterized亚军,我觉得组合Parallel
和Parameterized
并不容易。
当搜索“嵌套”和“JUnit”时,它会为嵌套类提供大量信息,但我正在寻找嵌套Runner
,而不是类。
答案 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以获取更多信息