2010-08-18 2 views
0

내 응용 프로그램 서비스에서 트랜잭션 롤백을 테스트하고 싶습니다. 결과적으로 스프링의 AbstractTransactionalJUnit4SpringContextTests@Transactional 주석을 사용하고 싶지는 않습니다. 주석은 트랜잭션에 내 테스트 메소드를 래핑합니다.Spring 트랜잭션 테스트 지원없이 Junit4 테스트를 작성하려면 어떻게해야합니까?

스프링이 또한 트랜잭션이없는 테스트를 위해 AbstractJUnit4SpringContextTests을 제공합니다. 그러나 나는 데이터를 내 데이터베이스에 저장하고 테스트중인 서비스를 실행 한 후에 어설 션을 위해 데이터를 쿼리하기 위해 일부 트랜잭션이 필요하다.

어떻게 기본 트랜잭션 테스트 관리없이 Junit 4 스프링 트랜잭션 테스트를 작성할 수 있습니까?

답변

3

같은 기본 TransactionalTestExecutionListener없이 테스트를 구성하는 것입니다 귀하의 질문에 대한 대답은 자신이를 포함해야한다;

@ContextConfiguration(value = "/applicationContext.xml") 
public class JPASpringTest extends AbstractJUnit4SpringContextTests { 
@PersistenceContext(unitName="jpadenemelocal") 
EntityManager entityManager; 

@Autowired 
protected PlatformTransactionManager transactionManager; 

@Test 
public void testInsertRolManyToMany() { 
TransactionStatus status = transactionManager.getTransaction(null); 
// your code 

transactionManager.commit(status); 
} 

} 
1

스프링 문서는 testing chapter

당신이 할 수 있습니다 것은 다음은이

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration 
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class,DirtiesContextTestExecutionListener.class}) 
public class SimpleTest { 

    @Test 
    public void testMethod() { 
     // execute test logic... 
    } 
} 
+0

폴, 나는 그들을 사용할 때 프로그램 적으로 트랜잭션을 생성하기 위해 EntityManager를 사용합니까? – JavaRocky

+0

죄송합니다. 원래 질문을 완전히 읽지 않았습니다. 따라서 실제로 테스트에서 트랜잭션이 필요합니다. 이 경우 프로그래밍 방식으로 생성하면 아마 작동 할 것이고, JPATransactionManager가 필요하다고 생각합니다. 그런 다음 다시 한 번, 전파 동작을 제어하여 선언적으로 수행해야 할 작업을 수행 할 수 있습니다. 어쩌면 당신이해야 할 일에 대한 예제 테스트를 제공 할 수 있다면 ... – Paul

관련 문제