스프링 부트 MVC 테스트 - MockMvc는 항상 null입니다.
첫 Spring MVC 테스트를 작성하려고 하는데 Spring Boot에서 MockMvc 종속성을 테스트 클래스에 삽입할 수 없습니다.제 수업은 다음과 같습니다.
@WebMvcTest
public class WhyWontThisWorkTest {
private static final String myUri = "uri";
private static final String jsonFileName = "myRequestBody.json";
@Autowired
private MockMvc mockMvc;
@Test
public void iMustBeMissingSomething() throws Exception {
byte[] jsonFile = Files.readAllBytes(Paths.get("src/test/resources/" + jsonFileName));
mockMvc.perform(
MockMvcRequestBuilders.post(myUri)
.content(jsonFile)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().is2xxSuccessful());
}
}
IntelliJ의 디버거를 확인했는데 mockMvc 자체가 null임을 확인할 수 있습니다.따라서 예외 메시지가 알려주는 것은 "java.lang"뿐입니다.특수한 포인터예외입니다.
Spring 초기화와 관련이 있지만 효과가 없는 경우를 대비하여 테스트 클래스에 "@SpringBootTest" 또는 "@RunWith(SpringRunner.class)"와 같은 더 일반적인 Spring Boot 주석을 추가하려고 이미 시도했습니다.
이상하네, 너도 같이 해 봤다면@RunWith(SpringRunner.class)그리고.@SpringBootTest에 대해서도 시도해 보셨습니까?@AutoConfigureMockMvc주석?아래 샘플은 정상적으로 동작하고 있습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void getHello() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Hello World of Spring Boot")));
}
}
여기에서 샘플 완성
또한 Spring 문서에 자세히 나와 있듯이 @WebMvcTest 및 @AutoConfigureMockMvc 주석 사용에 대한 다음 의견을 고려해 보는 것이 좋습니다.
기본적으로는 @WebMvcTest에서 주석을 단 테스트에서는 Spring Security 및 MockMvc(HtmlUnit WebClient 및 Selenium WebDriver 지원 포함)도 자동으로 설정됩니다.MockMVC를 보다 세밀하게 제어하려면 @AutoConfigureMockMvc 주석을 사용할 수 있습니다.
일반적으로 @WebMvcTest는 @MockBean 또는 @Import와 조합하여 @Controller bean에 필요한 콜라보레이터를 만듭니다.
전체 애플리케이션 구성을 로드하고 MockMVC를 사용하려면 @SpringBoot을 고려해야 합니다.이 주석이 아닌 @AutoConfigureMockMvc와 결합된 테스트입니다.
JUnit 4를 사용할 경우 이 주석을 @RunWith(SpringRunner.class)와 함께 사용해야 합니다.
저도 같은 문제에 직면했어요.알고 보니MockMvc호환되지 않는 주석으로 인해 주입되지 않았습니다.Import는org.junit.Test, 단, 로 변경합니다.org.junit.jupiter.api.Test문제를 해결했습니다.
수락된 답변은 가능하지만 Import하지 않고 문제를 해결했습니다.@RunWith(SpringRunner.class).
저 같은 경우에는 수입한 적이 있어요.org.junit.Test새로운 것이 아니라org.junit.jupiter.api.Test.
Maven을 사용하는 경우 다음을 제외하고 이러한 실수를 피할 수 있습니다.junit-vintage-engine부터spring-boot-starter-test의존관계:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
최신 또는 최소한 최신 버전이 있는지 확인합니다.maven-surefire-plugin그것은 문제를 해결하는 데 도움이 되었다.
언급URL : https://stackoverflow.com/questions/59534247/spring-boot-mvc-test-mockmvc-is-always-null
'source' 카테고리의 다른 글
| TypeScript에서 중첩된 클래스를 만들 수 있습니까? (0) | 2023.03.01 |
|---|---|
| 단일 그룹 함수가 아닌 SQL (0) | 2023.03.01 |
| 필드/키별 고유값의 mongodb 카운트 수 (0) | 2023.03.01 |
| JSON 기반 RESTful 코드의 예외를 처리하는 방법 (0) | 2023.03.01 |
| remove_action()이 WordPress 플러그인에서 작동하지 않음 (0) | 2023.03.01 |