source

오류: 스프링 컨트롤러의 @WebMvcTest 실행 시 @SpringBootConfiguration을 찾을 수 없습니다.

itover 2023. 3. 23. 22:41
반응형

오류: 스프링 컨트롤러의 @WebMvcTest 실행 시 @SpringBootConfiguration을 찾을 수 없습니다.

아래에 제시된 컨트롤러를 테스트하고 있습니다.

@Controller
public class MasterController {

@GetMapping("/")
public String goLoginPage(){
    return "index";
}
}

이 스프링 매뉴얼에 따라 컨트롤러를 테스트하고 있습니다.이제 설명서에 나와 있는 것처럼 Spring 컨텍스트 전체가 아니라 웹 계층을 인스턴스화하는 것만으로 컨트롤러를 테스트합니다.아래는 같은 내용의 제 코드입니다.

@RunWith(SpringRunner.class)
@WebMvcTest
public class MasterControllerTestWithWebLayer {

@Autowired
MockMvc mockMvc;

@Autowired
MasterController masterController;


@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void testLoginHome() throws Exception{
    mockMvc.perform(get("/"))
    .andExpect(status().isOk())
    .andExpect(view().name("index"));
}

}

.Unable to find @SpringBootConfiguration,...etc그런데 왜 Spring 설정을 인스턴스화하지 않고 웹 레이어만 사용하려고 하는지 헷갈립니다.여기서 무슨 일이 일어나고 있는지 올바른 방향으로 가르쳐 주세요.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★합니다.

해결책은 다음과 같습니다.

테스트 설정의 검출에 관한 메뉴얼에는, 다음과 같이 기재되어 있습니다.

검색 알고리즘은 테스트를 포함하는 패키지에서 @SpringBootApplication 또는 @SpringBootConfiguration 주석 클래스를 찾을 때까지 작동합니다.코드를 합리적인 방식으로 구성하면 일반적으로 기본 구성이 검색됩니다.

그...@SpringBootApplication 내에 등에서 클래스가 합니다.com.zerosolutions.controller@SpringBootApplication클래스는 다음보다 높은 패키지에 포함되어 있어야 합니다.com.zerosolutions.controller: " 、 "com.zerosolutions ★★★★★★★★★★★★★★★★★」com.

문제

, 의 경우@SpringBootApplication 즉, 수업을 찾을 수com.zerosolutions.general 경우 과 같은

java.displaces를 클릭합니다.InlawalStateException:@SpringBootConfiguration을 찾을 수 없습니다. 테스트에서 @ContextConfiguration 또는 @SpringBootTest(classes=...)를 사용해야 합니다.

솔루션

.@SpringBootApplication

@RunWith(SpringRunner.class)
@SpringBootTest(classes={SpringBootApp.class})

단, 컨트롤러 유닛테스트를 실시하려면 Spring 컨텍스트 전체를 기동할 필요는 없습니다.교환할 수 있습니다.@SpringBootTest@WebMvcTest(MasterController.class) 하면 웹 만 .으로됩니다.MasterController봄의 맥락 전체가 아닙니다.

문제

하지만 문제는 앞에서 우리가 직면했던 오류에 다시 직면하게 된다는 것입니다.

java.displaces를 클릭합니다.InlawalStateException:@SpringBootConfiguration을 찾을 수 없습니다. 테스트에서 @ContextConfiguration 또는 @SpringBootTest(classes=...)를 사용해야 합니다.

★★★★★★★★★★★★★★★★★.@WebMvtTest 있지 않다classes같은 특성@SpringBootTest명시적으로 언급하다@SpringBootApplication두 가지 해결책이 있습니다.

솔루션

번째: 어플리케이션 클래스를 테스트 클래스보다 높은 패키지로 이동합니다.com.zerosolutions또는com패키지.

번째: 고객님의@SpringBootApplication아래와 같이 명시적으로 수업하다

@RunWith(SpringRunner.class)
@WebMvcTest(MasterController.class)
@ContextConfiguration(classes={SpringBootApp.class})

그러면 스프링 테스트 설정의 혼란이 해소됩니다.감사해요.

Application.java 클래스(src/main/java)가 다음 위치에 있는 경우

com.A.B

테스트 클래스 ApplicationTest.java(src/test/java)는 다음과 같아야 합니다.

com.A.B또는com.A.B.C또는com.A.B.C.D

테스트 클래스가 다음 패키지 아래에 있는 경우 이 오류가 발생합니다.

com.A또는com.A.C또는com.A.D

스프링 부트에서는 테스트되는 Java 클래스 패키지의 패키지명으로 시작하는 것이 일반적인 규칙입니다.

같은 에러가 발생하여 프로젝트를 생성했을 때 pom.xml에 groupId가 실제 도메인이 아닌 com.example로 표시됩니다.
<groupId>com.example</groupId>
pom.xml을 다음과 같이 수정했습니다.
<groupId>com.mydomain</groupId>
다음으로 파일 구조를 다음과 같이 변경했습니다.
src/test/java/com/example로.src/test/java/com/mydomain
마지막으로 패키지 신고서를 업데이트해야 했습니다.
SampleProjectApplicationTest.java
올바른 파일 구조와 일치하도록 파일을 지정합니다.일단 모든 것이 갖추어지면, 테스트는 잘 진행되었습니다.

어떻게 com.example을 작성하게 되었는지 모르겠지만, 제 경우 수정은 매우 간단합니다.

이게 도움이 됐으면 좋겠는데

src/test/filename이 메인 클래스 패키지와 동일한 패키지 이름을 가지고 있는지 확인합니다.src/test/filename/com/filename/filename은 src/test/filename/filename과 동일합니다.

테스트 패키지 이름을 기본 응용 프로그램 클래스 패키지 이름으로 바꾸기만 하면 됩니다.

예:-package com.kotlin.dealerMainApplication이것이 나의 메인 앱 패키지 이름이기 때문에 테스트 패키지에 같은 이름을 넣을 것이다.

이건 나한테 효과가 있었어!

언급URL : https://stackoverflow.com/questions/43515279/error-unable-to-find-springbootconfiguration-when-doing-webmvctest-for-spring

반응형