Unit testing 嵌套测试跑步者
我试图找出是否以及如何能够嵌套JUnit测试运行程序,例如,组合a、a和a 对我来说,JUnit的设计似乎不是为了轻松实现这一点,否则应该有一个方法将下一个Unit testing 嵌套测试跑步者,unit-testing,junit,junit4,Unit Testing,Junit,Junit4,我试图找出是否以及如何能够嵌套JUnit测试运行程序,例如,组合a、a和a 对我来说,JUnit的设计似乎不是为了轻松实现这一点,否则应该有一个方法将下一个运行程序作为参数传递 有人还实现了一个runner,在我看来,将并行和参数化结合起来是不容易的 当谷歌搜索“nested”和“JUnit”时,它会为嵌套类提供大量信息,但我要查找的是嵌套Runner,而不是类。有一种叫做NestedRunner的东西,用于在嵌套配置中运行普通的旧Java类 您的测试以@RunWith(NestedRunner
运行程序作为参数传递
有人还实现了一个runner,在我看来,将并行
和参数化
结合起来是不容易的
当谷歌搜索“nested”和“JUnit”时,它会为嵌套类提供大量信息,但我要查找的是嵌套Runner,而不是类。有一种叫做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)));
}
}
}
}
@RunWith(NestedRunner.class)
公共类列表测试{
//用于共享公共上下文的内部类
公共类WithArrayList{
//这些测试的一些上下文
ArrayList=新建ArrayList();
公共课时{
@试验
公共无效itIsEmpty(){
assertTrue(list.isEmpty());
}
添加元素后的公共类{
//为这些测试提供更多的上下文
String element=“element”;
//您可以使用实例初始值设定项来初始化上下文
//每次测试将运行一次
{
//这里的列表仍然是空的
assertTrue(list.isEmpty());
列表。添加(元素);
}
@试验
公共空间没有吸引力{
assertFalse(list.isEmpty());
}
@试验
public void它包含元素(){
assertTrue(list.contains(element));
}
@试验
public void addingAnotherlementInCreasSize(){
int sizeBeforeAdding=list.size();
列表。添加(“其他元素”);
断言(list.size(),是(大于(sizeBeforeAdding));
}
@试验
公共无效列表SizeSistillOne(){
资产(list.size(),等于(1));
}
}
@试验
public void为空(){
assertTrue(list.isEmpty());
}
}
具有两个元素的公共类{
@以前
公共void init(){
列表。添加(“元素1”);
列表。添加(“元素2”);
}
@试验
公共无效hasSizeOfTwo(){
资产(list.size(),等于(2));
}
}
}
}
下面是详细信息此运行程序用于在嵌套类中运行测试。它不提供同时应用多个跑步者的选项。@RunWith注释需要像@InnerRunners(GuiceJUnitRunner、ParameterizedRunner、HierarchycalContextRunner)
这样的添加来标识嵌套的运行程序。这对于链接到的NestedRunner不可用。