由于重复的@RunWith注释,下列代码无效:
@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(Parameterized.class)
@SpringApplicationConfiguration(classes = {ApplicationConfigTest.class})
public class ServiceTest {
}但是如何结合使用这两个注释呢?
发布于 2015-02-17 12:26:44
要做到这一点,至少有两个选择:
因此,您可以有一个实现其中一种方法的基本类,以及从它继承的所有测试。
发布于 2016-06-16 21:08:16
您可以使用Spring提供的SpringClassRule和SpringMethodRule
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.springframework.test.context.junit4.rules.SpringClassRule;
import org.springframework.test.context.junit4.rules.SpringMethodRule;
@RunWith(Parameterized.class)
@ContextConfiguration(...)
public class MyTest {
@ClassRule
public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();
@Rule
public final SpringMethodRule springMethodRule = new SpringMethodRule();
...发布于 2018-08-10 14:02:42
还有一种解决方案是使用JUnit 4.12,而不需要Spring 4.2+。
JUnit 4.12引入了允许参数化测试和Spring注入相结合的ParametersRunnerFactory。
public class SpringParametersRunnerFactory implements ParametersRunnerFactory {
@Override
public Runner createRunnerForTestWithParameters(TestWithParameters test) throws InitializationError {
final BlockJUnit4ClassRunnerWithParameters runnerWithParameters = new BlockJUnit4ClassRunnerWithParameters(test);
return new SpringJUnit4ClassRunner(test.getTestClass().getJavaClass()) {
@Override
protected Object createTest() throws Exception {
final Object testInstance = runnerWithParameters.createTest();
getTestContextManager().prepareTestInstance(testInstance);
return testInstance;
}
};
}
}工厂可以添加到测试类中,以提供测试事务、恢复脏上下文和servlet测试等完整的Spring支持。
@UseParametersRunnerFactory(SpringParametersRunnerFactory.class)
@RunWith(Parameterized.class)
@ContextConfiguration(locations = {"/test-context.xml", "/mvc-context.xml"})
@WebAppConfiguration
@Transactional
@TransactionConfiguration
public class MyTransactionalTest {
@Autowired
private WebApplicationContext context;
...
}如果您需要@参数静态方法中的Spring来提供参数来测试实例,请参见我在这里的答案如何使用带有使用Spring注入的字段的参数化JUnit测试运行程序?。
https://stackoverflow.com/questions/28560734
复制相似问题