h2 Error

황상익·2024년 8월 6일

testCode 작성중 h2와 연결해 test를 해보려고 하는데 동작이 되질 않았다

ava.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@18460128 testClass = miniproject.fintech.service.MemberServiceTest, locations = [], classes = [miniproject.fintech.FintechApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTestContextBootstrapper=true"], contextCustomizers = 
...

우선 DataSource를 자동으로 구성하려고 하는데 문제가 발생했다고 보인다...

해결방법으로 사용했던 것 중 첫번째는 h2에 쿼리를 다시 작성해보는 것이다.

CREATE TABLE bank_member (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    account_number VARCHAR(255),
    address VARCHAR(255),
    age INT,
    birth DATE,
    created_at TIMESTAMP,
    deleted_at TIMESTAMP,
    grade VARCHAR(255),
    name VARCHAR(255),
    password VARCHAR(255)
);

두번재는 yml의 설정을 다시 틀린 부분이 없는지 체크

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/fintech
    driver-class-name: org.h2.Driver
    username: sa
    password: 
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
  h2:
    console:
      enabled: true

세번째는 @DataJpaTest를 넣어 JPA 관련 컴포넌트만 로드 하게끔 하면 된다.

나는 쿼리를 다시 짜보니 잘 되었다... Table 명이 잘못되어 있었다... 내 삽질... ㅠ

@SpringBootTest
class MemberServiceTest {

    @Autowired
    private MemberService memberService;
    @Autowired
    private MemberRepository memberRepository;

    @Test
    void saveMember(){
        BankMember bankMember = BankMember.builder()
                .name("아리")
                .password("123456789")
                .accountNumber("abc123")
                //.id(1L) 자동 할당 됨으로 굳이 필요 없음
                .age(20)
                .birth(LocalDate.of(1995, 6, 5))
                .createdAt(LocalDateTime.now())
                .grade(Grade.NORMAL)
                .address("서울")
                .build();

        BankMember saveMember = memberService.save(bankMember);
        assertNotNull(saveMember.getId());
        assertThat(saveMember.getName()).isEqualTo("아리");
        assertThat(saveMember.getPassword()).isEqualTo("123456789");
    }

}
profile
개발자를 향해 가는 중입니다~! 항상 겸손

0개의 댓글