작성
·
458
0
안녕하세요!
강의를 듣고 강의를 토대로 혼자 이것 저것 해보고 있는 학생입니다!
다름이 아니라 강의와 다르게 h2를 spring boot 가 실행 될 때 메모리에서만 동작하게 하고싶어서
JDBC URL 을 jdbc:h2:mem/test 라고 지정을 했습니다.
그리고 문제는 @Test 어노테이션이 붙은 테스트 클래스에서 발생하였는데요, RepositoryTest 에서 @Transactional과 @Rollback(false) 를 추가시켰음에도 불구하고
spring boot가 돌아가는 8080/h2-console 에서는 자동으로 rollback이 되는데, 혹시 어떤게 문제인지 알 수 있을까요?
// MemberRepositoryTest
@SpringBootTest
@Transactional
@Rollback(false)
class MemberRepositoryTest {
@Autowired
private MemberRepository memberRepository;
@Test
@DisplayName("이메일로 조회")
void read() {
// given
String email = "dhslrl321@gmail";
String password = "hwi199";
String nickname = "dhslrl321";
Member member = Member.builder()
.email(email)
.password(password)
.nickname(nickname)
.build();
memberRepository.save(member);
// when
Optional<Member> memberOptional = memberRepository.findByEmail(email);
// then
memberOptional.ifPresentOrElse(
m -> assertEquals(nickname, m.getNickname()),
Assertions::fail
);
}
}
// application.yml
spring:
h2:
console:
path: /h2-console
enabled: true
settings:
web-allow-others: true
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:auth
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop
properties:
show_sql: true
format_sql: true
답변 1
1
안녕하세요. 원익님
정확이 어떤 상황인지 잘 이해가 되지 않지만 답변을 드려볼게요.
테스트는 시작하고 끝나면 종료되어 버립니다. 따라서 메모리 모드로 동작하면 초기화 되는 것이 맞습니다.
추가로 ddl-auto: create-drop까지 되어 있어서 실행 후 종료되면 테이블을 모두 삭제합니다.
감사합니다.