테스트에 @Transactional
이 있어야 롤백이 된다!
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MemberServiceTest {
@Autowired
MemberService memberService;
@Autowired
MemberRepository memberRepository;
@Test
public void 회원가입() throws Exception {
Member member = new Member();
member.setName("lee");
Long savedId = memberService.join(member);
assertEquals(member, memberRepository.findOne(savedId));
}
// ...
@Transantional
을 지우면 롤백 되지 않고 commit 되어 insert쿼리가 실행된다.@Test(expected = IllegalStateException.class)
public void 중복_회원_예외() throws Exception {
Member member1 = new Member();
member1.setName("lee");
Member member2 = new Member();
member2.setName("lee");
memberService.join(member1);
memberService.join(member2);
}
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MemberServiceTest {
실제 외부의 H2 DB를 사용했다. 테스트를 실행하기 위해 DB를 설치하고 실행하기 번거롭다.
그래서 메모리 디비를 사용할 수 있다!!
스프링부트가 지원
라이브러리에 h2가 있으면 메모리 모드로 실행할 수 있다. h2가 자바로 되어 있기 때문에 JVM안에서 돈다.
spring:
datasource:
url: jdbc:h2:mem:test
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging:
level:
org.hibernate.SQL: debug
org.hibernate.type: trace