有没有人知道如何解决这个问题。
@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(Parametrized.class)
@ContextConfiguration("/META-INF/blah-spring-test.xml")
public class BlahTest
..
所以我希望进行一次弹簧性测试,同时希望对其进行参数化以避免代码重复......
答案 0 :(得分:4)
您不能使用评论帖中提到的两个参赛者。你应该使用Parameterized
runner来使用Spring的TestContextManager来加载Spring上下文。
@Before
public void before() throws Exception {
new TestContextManager(getClass()).prepareTestInstance(this);
}
答案 1 :(得分:0)
从Spring Framework 4.2开始,现在可以使用 JUnit规则而不是SpringJUnit4ClassRunner
执行基于JUnit的集成测试。这允许基于Spring的集成测试与JUnit的Parameterized
或第三方运行程序(如MockitoJUnitRunner
)等替代运行程序一起运行。有关spring doc的更多详情。
答案 2 :(得分:0)
使用John B's answer建立在TestContextManager
的基础上,还可以调用beforeTestMethod()
和afterTestMethod()
来更好地模拟SpringJUnit4ClassRunner
的行为(例如加载数据库) @Sql
)。
这些方法需要一个Method
参数,因此例如可以利用JUnit4的TestName
规则来获取当前测试方法的名称,然后通过反射来获取它。
private static TestContextManager springTestContext
= new TestContextManager(BlahTest.class);
@Rule
public TestName testName = new TestName();
@Before
public void before() throws Exception {
springTestContext.prepareTestInstance(this);
springTestContext.beforeTestMethod(this,
getClass().getMethod(testName.getMethodName()));
}
@After
public void after() throws Exception {
springTestContext.afterTestMethod(this,
getClass().getMethod(testName.getMethodName()), null);
}