Spring + JUnitでParameterized実行する
上記のQiita記事通りにやっても動かなかったので…
以下のような感じで、@ClassRuleと@Ruleを宣言してやれば無事動いた
package org.tmarcus import org.junit.ClassRule; import org.junit.Rule; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.test.context.junit4.rules.SpringClassRule; import org.springframework.test.context.junit4.rules.SpringMethodRule; @ActiveProfiles("test") @SPringApplicationConfiguration(ParameterizedTestBase.class) @EnableAutoConfiguration @ComponentScan(basePackages = { "org.tmarcus" }) @RunWith(Parameterized.class) public ParameterizedTestBase extends TestBase { @ClassRule public static final SpringClassRule SCR = new SpringClassRule(); @Rule public final SpringMethodRule springMethodRule = new SpringMethodRule(); }
package org.tmarcus import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runners.Parameterized; import org.tmarcus.service.MathmaticsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.TestContextManager; import java.util.Collection; import java.util.List; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @Slf4j public class SampleTest extends ParameterizedTestBase { private MathmaticsService service; @Autowired public void inject( MathmaticsService service) { this.service = service; } @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { { 0, 1 }, { 1, 1 }, { 2, 2 }, { 3, 6 }, { 4, 24 }, { 5, 120 } }); } @Parameterized.Parameter(0) // <- index=0のパラメータを代入する public int parameter; @Parameterized.Parameter(1) // <- index=1のパラメータを代入する public int factorialExpected; @Test public void test() { log.info("{} -> {}", parameter, expected); assertThat(service.factorial(parameter), is(factorialExpected)); } }