vlc*_*cik 4 java junit spring spring-test
我需要在每个JUnit测试方法之前执行一些代码.要执行这段代码,我使用SpringTest类AbstractTestExecutionListener及其子TransactionContextTestExecutionListener.
这是代码:
public class TransactionContextTestExecutionListener extends AbstractTestExecutionListener{
private static final Logger logger = Logger.getLogger(TransactionContextTestExecutionListener.class);
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
Object ctx = testContext.getApplicationContext().getBean(Context.class);
}
Run Code Online (Sandbox Code Playgroud)
我的JUnit类看起来像:
@ContextConfiguration(locations = "classpath:/META-INF/spring-test/tests-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(TransactionContextTestExecutionListener.class)
@Transactional
public class SelectQueryBuilderTest {}
Run Code Online (Sandbox Code Playgroud)
问题是beforeTestMethod方法只在第一次执行测试方法之前调用.在所有其余的之前没有调用它.
配置有问题吗?任何的想法?
谢谢
Rom*_*las 13
当您使用JUnit运行JUnit类时SpringJUnit4ClassRunner,可以使用JUnit 4注释:
@Before
public void multipleInit() {
// Called before each method annotated with @Test
...
}
@BeforeClass
public static void initAll() {
// Called once per class, before any method annotated with @Test is called
...
}
Run Code Online (Sandbox Code Playgroud)
我建议尝试@Before.例如,考虑为您的测试创建一个基类:
@ContextConfiguration(locations = "classpath:/META-INF/spring-test/tests-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(TransactionContextTestExecutionListener.class)
@Transactional
public class BaseQueryBuilderTest {
@Autowired
private ApplicationContext applicationContext;
protected Context context;
@Before
public void setUp() {
context = applicationContext.getBean(Context.class);
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以按如下方式编写测试实现:
public class SelectQueryBuilderTest extends BaseQueryBuilderTest {
@Test
public void test() {
// Use context
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法的一个好处是它将大量元数据封装在基类中,使您不必在所有实际测试类中复制它.
| 归档时间: |
|
| 查看次数: |
21783 次 |
| 最近记录: |