2013-01-18 4 views
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におけるものは外で実行されますトランザクション。

答えて

関連する問題