Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JUnit测试分组在一起_Java_Junit_Junit Runner - Fatal编程技术网

Java 如何将JUnit测试分组在一起

Java 如何将JUnit测试分组在一起,java,junit,junit-runner,Java,Junit,Junit Runner,我正在尝试创建一个junit Runner,它将使用以下命令将常见测试分组: 另外,当我在Eclipse中运行此测试时,我希望看到它们组合在一起,但事实并非如此。我错过了什么?甚至可能吗?您可以使用JUnit测试套件,如下所示: import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @S

我正在尝试创建一个junit Runner,它将使用以下命令将常见测试分组:


另外,当我在Eclipse中运行此测试时,我希望看到它们组合在一起,但事实并非如此。我错过了什么?甚至可能吗?

您可以使用JUnit测试套件,如下所示:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ SomeTest.class, AnotherTest.class, YetAnotherTest.class })
public class AllTests {

}
要遵循的模板是,因为它似乎做了您想要做的事情。对于给定的测试类,它会多次运行测试方法,并为每一组参数创建一个测试,这就是我认为您想要的:

public class GroupedTestRunner extends Suite {
  private class TestClassRunnerForParameters extends BlockJUnit4ClassRunner {
    private String name;

    TestClassRunnerForParameters(Class<?> type, String name) throws InitializationError {
      super(type);
      this.name = name;
    }

    @Override
    public Object createTest() throws Exception {
      return getTestClass().getOnlyConstructor().newInstance();
    }

    @Override
    protected String getName() {
      return String.format("[%s]", name);
    }

    @Override
    protected String testName(final FrameworkMethod method) {
      return String.format("%s[%s]", method.getName(), name);
    }
  }

  private final ArrayList<Runner> runners = new ArrayList<Runner>();

  public GroupedTestRunner(Class<?> klass) throws Throwable {
    super(klass, Collections.<Runner> emptyList());

    // do grouping things here
    runners.add(new TestClassRunnerForParameters(getTestClass().getJavaClass(), "group1"));
    runners.add(new TestClassRunnerForParameters(getTestClass().getJavaClass(), "group2"));
  }

  @Override
  protected List<Runner> getChildren() {
    return runners;
  }
}
公共类GroupedTestRunner扩展套件{
私有类TestClassRunnerForParameters扩展了BlockJUnit4ClassRunner{
私有字符串名称;
TestClassRunnerForParameters(类类型、字符串名称)引发初始化错误{
超级(型);
this.name=名称;
}
@凌驾
公共对象createTest()引发异常{
返回getTestClass().getOnlyConstructor().newInstance();
}
@凌驾
受保护的字符串getName(){
返回字符串。格式(“[%s]”,名称);
}
@凌驾
受保护的字符串testName(最终框架方法){
返回String.format(“%s[%s]”,method.getName(),name);
}
}
private final ArrayList runners=新ArrayList();
公共组的estrunner(类klass)抛出可丢弃的{
super(klass,Collections.emptyList());
//在这里做分组
添加(新的TestClassRunnerForParameters(getTestClass().getJavaClass(),“group1”);
添加(新的TestClassRunnerForParameters(getTestClass().getJavaClass(),“group2”);
}
@凌驾
受保护列表getChildren(){
复赛选手;
}
}
这会产生如下输出(在Eclipse中):


它的打印顺序与您触发测试失败的顺序完全相同。你有什么不同的期待?我希望看到他们在套房里聚在一起。这不是CreateSuitedDescription()和addChild()要做的吗?请参阅此处的进一步信息-当然,但我希望从运行程序中创建这些套件。这不可能吗?如果您有几个要分组的测试,那么这就是如何使用套件的。但这不是我的情况-我只有一个测试,但有多个结果,我想用跑步者分组。很抱歉误解了这个问题。结果看起来不错,但我的问题是我只有一个测试,我不想重复。该测试返回多个结果,我希望将这些结果分组,并创建一个显示这些结果的多套件junit测试报告。你认为有可能吗?
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ SomeTest.class, AnotherTest.class, YetAnotherTest.class })
public class AllTests {

}
public class GroupedTestRunner extends Suite {
  private class TestClassRunnerForParameters extends BlockJUnit4ClassRunner {
    private String name;

    TestClassRunnerForParameters(Class<?> type, String name) throws InitializationError {
      super(type);
      this.name = name;
    }

    @Override
    public Object createTest() throws Exception {
      return getTestClass().getOnlyConstructor().newInstance();
    }

    @Override
    protected String getName() {
      return String.format("[%s]", name);
    }

    @Override
    protected String testName(final FrameworkMethod method) {
      return String.format("%s[%s]", method.getName(), name);
    }
  }

  private final ArrayList<Runner> runners = new ArrayList<Runner>();

  public GroupedTestRunner(Class<?> klass) throws Throwable {
    super(klass, Collections.<Runner> emptyList());

    // do grouping things here
    runners.add(new TestClassRunnerForParameters(getTestClass().getJavaClass(), "group1"));
    runners.add(new TestClassRunnerForParameters(getTestClass().getJavaClass(), "group2"));
  }

  @Override
  protected List<Runner> getChildren() {
    return runners;
  }
}