[SPRING] @Test 이후 롤백 트랜잭션
SPRING@Test 이후 롤백 트랜잭션
우선, StackOverflow에서 많은 스레드를 발견했습니다.하지만 그 중 아무도 정말로 도움이되지 않으므로 중복 질문을해도 좋습니다.
스프링 테스트를 사용하여 JUnit 테스트를 실행하고 있습니다. 내 코드는 다음과 같습니다.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {})
public class StudentSystemTest {
@Autowired
private StudentSystem studentSystem;
@Before
public void initTest() {
// set up the database, create basic structure for testing
}
@Test
public void test1() {
}
...
}
내 문제는 내 테스트가 다른 테스트에 영향을 미치지 않도록하려는 것입니다. 그래서 각 테스트마다 롤백과 같은 것을 만들고 싶습니다. 나는 이걸 많이 찾았지만 지금까지 아무 것도 찾지 못했습니다. 나는 이것을 위해 Hibernate와 MySql을 사용하고있다.
해결법
-
==============================
1.테스트 상단에 @Transactional 주석을 추가하면됩니다.
테스트 상단에 @Transactional 주석을 추가하면됩니다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"testContext.xml"}) @Transactional public class StudentSystemTest {
기본적으로 Spring은 테스트 메소드와 @ Before / @ 콜백 후에 새로운 트랜잭션을 시작하고 마지막에는 롤백합니다. 기본적으로 작동하며 컨텍스트에서 일부 트랜잭션 관리자가 있으면 충분합니다.
보낸 사람 : 10.3.5.4 트랜잭션 관리 (대담한 광산) :
-
==============================
2.옆으로 : Tomasz Nurkiewicz의 답변을 거부하려고하는 시도가 거부되었습니다.
옆으로 : Tomasz Nurkiewicz의 답변을 거부하려고하는 시도가 거부되었습니다.
통합 테스트에 대한 관련 문서 섹션에 대한 정확하고 영구적 인 링크
@Configuration @PropertySource("application.properties") public class Persistence { @Autowired Environment env; @Bean DataSource dataSource() { return new DriverManagerDataSource( env.getProperty("datasource.url"), env.getProperty("datasource.user"), env.getProperty("datasource.password") ); } @Bean PlatformTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); } }
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {Persistence.class, SomeRepository.class}) @Transactional public class SomeRepositoryTest { ... }
-
==============================
3.@Transactional을 추가하는 것에 대한 답변은 정확 합니다만, 간단하게 말해서 테스트 클래스가 AbstractTransactionalJUnit4SpringContextTests를 확장하도록 할 수 있습니다.
@Transactional을 추가하는 것에 대한 답변은 정확 합니다만, 간단하게 말해서 테스트 클래스가 AbstractTransactionalJUnit4SpringContextTests를 확장하도록 할 수 있습니다.
-
==============================
4.나도 알아, 나는 대답을 게시하기 위해 늦게 tooooo이지만, 그것이 누군가를 도울 수 있기를 바래. 게다가, 나는 내 테스트에서 내가 가진이 문제를 해결했다. 이것이 내가 시험에서 얻은 것입니다.
나도 알아, 나는 대답을 게시하기 위해 늦게 tooooo이지만, 그것이 누군가를 도울 수 있기를 바래. 게다가, 나는 내 테스트에서 내가 가진이 문제를 해결했다. 이것이 내가 시험에서 얻은 것입니다.
내 테스트 클래스
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "path-to-context" }) @Transactional public class MyIntegrationTest
컨텍스트 xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
나는 여전히 데이터베이스가 자동으로 정리되지 않는다는 문제가 있었다.
BasicDataSource에 다음 속성을 추가 할 때 문제가 해결되었습니다.
<property name="defaultAutoCommit" value="false" />
희망이 도움이됩니다.
-
==============================
5.스프린트 컨텍스트와 트랜잭션 관리자 (예 :
스프린트 컨텍스트와 트랜잭션 관리자 (예 :
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/your-applicationContext.xml"}) @TransactionConfiguration(transactionManager="txMgr") public class StudentSystemTest { @Test public void testTransactionalService() { // test transactional service } @Test @Transactional public void testNonTransactionalService() { // test non-transactional service } }
자세한 내용은 10 장. Spring 참조 테스트를 참조하십시오.
-
==============================
6.롤백을 비활성화 할 수 있습니다.
롤백을 비활성화 할 수 있습니다.
@TransactionConfiguration(defaultRollback = false)
예:
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @Transactional @TransactionConfiguration(defaultRollback = false) public class Test { @PersistenceContext private EntityManager em; @org.junit.Test public void menge() { PersistentObject object = new PersistentObject(); em.persist(object); em.flush(); } }
from https://stackoverflow.com/questions/12626502/rollback-transaction-after-test by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 3 mvc, 올바른 구문을 사용하여 양식지지 개체로 <Foo> 목록? (0) | 2018.12.10 |
---|---|
[SPRING] 서블릿 필터에서 Spring 빈을 얻으려면 어떻게해야합니까? (0) | 2018.12.09 |
[SPRING] OAuth2RestTemplate을 사용하는 방법? (0) | 2018.12.09 |
[SPRING] Spring MVC 3에서 양식 제출 - 설명 (0) | 2018.12.09 |
[SPRING] Spring의 설정 파일에서 Bean의 속성 Enum 값을 할당하는 방법은 무엇입니까? (0) | 2018.12.09 |