10

@RunWith(A.class) でテストにアノテーションを付けることができるように、BlockJUnit4ClassRunner から継承されたランナー クラス A.class を実装しました。同時に、sb。それ以外の場合は、RunWith(Parameterized.class) でテストに注釈を付けます。2 つの @RunWith を同時に使用できないことは明らかです。

この問題を解決するには?またはこれら2つの@RunWithをマージする方法は?

4

1 に答える 1

13

私はこれがあなたが望むことをすると信じています:

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

于 2015-01-03T01:40:21.547 に答える