• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

Failed to load ApplicationContext 오류 해결 방법

24.02.03 19:30 작성 24.02.03 19:39 수정 조회수 646

0

[질문 내용]
회원기능 테스트에서 분명 강사님이 하신거랑 똑같이 따라했고 오타가 있을까하여 강의 소스 코드도 점검하고 복사붙여넣기 까지 했는데 같은 오류가 계속 반복해서 발생합니다..

 

오류:
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@f849027 testClass = jpabook.jpashop.service.MemberServiceTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@5c2375a9, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@492691d7, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@67545b57, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@1c93f6e1, org.springframework.boot.test.context.SpringBootTestAnnotation@5495e57], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)

at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)

at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191)

at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130)

at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)

at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)

at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)

at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)

at org.springframewo

 

https://www.inflearn.com/questions/974433/java-lang-illegalstateexception-failed-to-load-applicationcontext-%EC%98%A4%EB%A5%98

이 링크와 같은 문제인 것 같은데 h2를 재설치 해도 해결 되지 않네요 ㅜㅜ 도움 받을 수 있을까요?

 

package jpabook.jpashop.service;

import jpabook.jpashop.domain.Member;
import jpabook.jpashop.repository.MemberRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import jakarta.persistence.EntityManager;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class MemberServiceTest {

    @Autowired MemberService memberService;
    @Autowired MemberRepository memberRepository;
    @Autowired EntityManager em;

    @Test
    public void 회원가입() throws Exception {
       //given
       Member member = new Member();
       member.setName("kim");

       //when
       Long savedId = memberService.join(member);

       //then
       assertEquals(member, memberRepository.findOne(savedId));
    }

    @Test(expected = IllegalStateException.class)
    public void 중복_회원_예외() throws Exception {
       //given
       Member member1 = new Member();
       member1.setName("kim");

       Member member2 = new Member();
       member2.setName("kim");

       //when
       memberService.join(member1);
       memberService.join(member2); //예외가 발생해야 한다!!!

       //then
       fail("예외가 발생해야 한다.");
    }
}

 

package jpabook.jpashop.repository;

import jpabook.jpashop.domain.Member;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import jakarta.persistence.EntityManager;
import java.util.List;

@Repository
@RequiredArgsConstructor
public class MemberRepository {

    private final EntityManager em;

    public void save(Member member) {
       em.persist(member);
    }

    public Member findOne(Long id) {
       return em.find(Member.class, id);
    }

    public List<Member> findAll() {
       return em.createQuery("select m from Member m", Member.class)
          .getResultList();
    }

    public List<Member> findByName(String name) {
       return em.createQuery("select m from Member m where m.name = :name", Member.class)
          .setParameter("name", name)
          .getResultList();
    }
}

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.05

안녕하세요, 인프런 AI 인턴입니다.

‘Failed to load ApplicationContext’ 오류는 스프링 부트 테스트를 실행할 때 애플리케이션 컨텍스트 설정에 문제가 있는 경우 발생합니다. 해당 오류의 가장 일반적인 원인은 다음과 같습니다:

  1. @SpringBootTest로 테스트할 때 애플리케이션의 설정 파일이 올바르게 위치하고 있는지 확인하세요.
  2. 설정 파일에 잘못된 빈 설정이 없는지 확인하세요.
  3. 데이터베이스 연결 설정을 포함한 외부 리소스 설정이 올바른지 검증하세요.
  4. 테스트 클래스의 위치가 프로젝트 구조 내에서 적절한 패키지 안에 있는지 확인하세요.

강의에서 사용하는 H2 데이터베이스 설정이 테스트 환경과 일치하는지, 데이터베이스 URL이 올바른지, 그리고 H2 데이터베이스가 정상적으로 실행되고 있는지 확인해 보세요.

위 사항들을 점검하시고 문제가 없다면, 테스트 설정 파일이나 application.properties 파일 내의 설정이 테스트 환경과 잘 맞도록 조정해 보세요. 예를 들어, H2 데이터베이스 접속 설정이 잘못되었을 수 있으므로 해당 부분을 다시 검토해 보시기 바랍니다.

질문하신 내용과는 관련이 없지만, 가장 주변적인 내용을 참고할 만한 추가 정보가 제공되어 있습니다:

  • H2 데이터베이스 접속 오류 해결 방법 문서: 링크

이 문서에 나와 있는 방법으로 H2 데이터베이스 설정을 점검하시면 도움이 될 수 있습니다.

만약 여러 가지를 시도해도 문제가 해결되지 않는다면, 이슈를 좀 더 자세히 분석하기 위해서는 스프링 부트 관련 로그나 설정 파일 등의 추가 정보가 필요할 수 있습니다.