如何将@RunWith与@RunWith(参数化.class)相结合



我实现了从 BlockJUnit4ClassRunner 继承的运行器类 A.class,以便我可以使用 @RunWith(A.class) 注释测试。同时,sb. else 使用 RunWith(Parameterized.class) 注释测试。很明显,我们不能同时使用两个@RunWith。

如何解决这个问题?或者如何合并这两个@RunWith?

我相信这能满足你的要求:

package so.junit.runner;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.model.InitializationError;
import org.junit.runners.parameterized.BlockJUnit4ClassRunnerWithParameters;
import org.junit.runners.parameterized.ParametersRunnerFactory;
import org.junit.runners.parameterized.TestWithParameters;
import java.util.Arrays;
@RunWith(Parameterized.class)
@Parameterized.UseParametersRunnerFactory(CustomParameterizedTest.RunnerFactory.class)
public class CustomParameterizedTest {
  @Parameterized.Parameters
  public static Iterable<Integer> data() {
    return Arrays.asList(new Integer[]{1, 2, 3});
  }
  private int i;
  public CustomParameterizedTest(int i) {
    this.i = i;
  }
  @Test
  public void test() {
    System.out.println(i);
  }
  public static class RunnerFactory implements ParametersRunnerFactory {
    @Override
    public org.junit.runner.Runner createRunnerForTestWithParameters(TestWithParameters test) throws InitializationError {
      return new A(test);
    }
  }
  public static class A extends BlockJUnit4ClassRunnerWithParameters {
    private final Object[] parameters;
    public A(TestWithParameters test) throws InitializationError {
      super(test);
      parameters = test.getParameters().toArray(new Object[test.getParameters().size()]);
    }
    @Override
    public Object createTest() throws Exception {
      return getTestClass().getOnlyConstructor().newInstance(parameters);
    }
  }
}

基于 JUnit 参数化类中的 Javadoc,这就是他们希望您创建支持参数化的自定义测试运行器的方式。

更新

更新为自定义运行器命名A

相关内容

  • 没有找到相关文章

最新更新