테스트에 @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));
	}

	// ...
@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