오류: 스프링 컨트롤러의 @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
'source' 카테고리의 다른 글
| $watch ng 격리 범위를 사용하는 내부 지시어 모델 (0) | 2023.03.23 |
|---|---|
| 리액트 라우터 스위치의 동작 (0) | 2023.03.23 |
| Wordpress 플러그인 프로그램 설치 및 활성화 (0) | 2023.03.23 |
| 동일한 이름의 내보낸 클래스 두 개 가져오기 (0) | 2023.03.23 |
| Python을 사용하는 JSON에 대한 개체 목록 (0) | 2023.03.23 |