9
私はいくつかのデータベース操作をテストメソッドのトランザクションの中に入れたいと思います。私はこのためにjunit TestRulesを使用したいと思います。しかし、ルールはトランザクション外で実行されます。取引の中でルールを実行する方法はありますか?junitの実行方法AbstractTransactionalJUnit4SpringContextTestsトランザクション内のルールはありますか?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:/META-INF/spring/applicationContext.xml"})
public class ProductServiceTest extends AbstractTransactionalJUnit4SpringContextTests {
public @Rule @Autowired MySimpleSpringRule mySimpleSpringRule;
@Before
public void before() {
logger.debug("before");
}
@After
public void after() {
logger.debug("after");
}
@Test
public void testFindProducts() {
...
と
@Component
public class MySimpleSpringRule implements TestRule {
private class Banaani extends ExternalResource {
@Override
protected void before() throws Throwable {
logger.debug("before");
};
@Override
protected void after() {
logger.debug("after");
};
}
private final Banaani banaani = new Banaani();
@Override
public Statement apply(Statement st, Description desc) {
return banaani.apply(st, desc);
}
結果
2013-01-18 10:33:24,845 DEBUG [main]: MySimpleSpringRule - before
2013-01-18 10:33:24,869 INFO [main]: ionalTestExecutionListener - Began transaction (1): transaction manager [[email protected]]; rollback [true]
2013-01-18 10:33:24,869 DEBUG [main]: ProductServiceTest - before
2013-01-18 10:33:24,869 DEBUG [main]: ProductServiceTest - running test...
2013-01-18 10:33:24,984 DEBUG [main]: ProductServiceTest - after
2013-01-18 10:33:24,986 INFO [main]: ionalTestExecutionListener - Rolled back transaction after test execution for test context [[[email protected] testClass = ProductServiceTest, testInstance = [email protected], testMethod = [email protected], testException = [null], mergedContextConfiguration = [[email protected] testClass = ProductServiceTest, locations = '{classpath:/META-INF/spring/test-bean-configuration.xml, classpath:/META-INF/spring/applicationContext.xml, classpath:/META-INF/spring/infrastructure.xml}', classes = '{}', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader']]]
2013-01-18 10:33:24,987 DEBUG [main]: MySimpleSpringRule - after
テストクラスの直接@Beforeと@After方法はトランザクション内で実行されるが、MySimpleSpringRuleにおけるものは外で実行されますトランザクション。