test runwith asserts junit junit-runner

junit - asserts - cómo combinar @RunWith con @RunWith(Parameterized.class)



runwith junit (1)

Implementé una clase de corredor A.class heredada de BlockJUnit4ClassRunner para que yo pueda anotar las pruebas con @RunWith (A.class). Al mismo tiempo, sb. si no, anota las pruebas con RunWith (Parameterized.class). Es obvio que no podemos usar dos @RunWith al mismo tiempo.

¿Cómo resolver este problema? o cómo fusionar estos dos @RunWith?


Creo que esto hace lo que quieres:

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); } } }

Basado en los Javadocs en la clase JUnit Parameterized, así es como esperan que cree un runner de prueba personalizado que admita la parametrización.

ACTUALIZAR

Actualizado para nombrar el corredor personalizado A