static method 모킹하는 방법

 

MockedStatic<TestClass> mock = mockStatic(TestClass.class);
1. TestClass클래스 타입으로 Mocking 해준다.

mock.when(() -> TestClass.getMethod).thenReturn(null);
2. 모킹한 객체로 when 사용시 직접 static method를 호출
  • 대신 의존성으로 mockito-inline 이 필요함.

 

WebMVCTest vs AutoconfigureWebMvc vs SpringBootTest 차이점

 

  • SpringBootTest는 실제와 마찬가지로 어플리케이션을 시작하며 테스트를 한다.
  • webEnvironment = WebEnvironment.RANDOM_PORT 사용시
  • 임의의 포트를 사용한다.
  • 임의의 포트를 사용하는 이유는 테스트할때 충돌을 방지하기 위함.
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class HttpRequestTest {

	@LocalServerPort
	private int port;

	@Autowired
	private TestRestTemplate restTemplate;

	@Test
	public void greetingShouldReturnDefaultMessage() throws Exception {
		assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/",
				String.class)).contains("Hello, World");
	}
}

 

  • AutoconfigureWebMvc는 서버를 시작하지 않고 아래 계층만 테스트
  • Spring은 들어오는 HTTP 요청을 처리하고 이를 컨트롤러에 전달
  • 아래와 같이 테스트를 한다면 전체 스택이 사용되며 코드는
  • 실제 HTTP 요청을 처리하는 것과 똑같은 방식으로 호출되지만 서버시작 비용이 없다.
@SpringBootTest
@AutoConfigureMockMvc
public class TestingWebApplicationTest {

	@Autowired
	private MockMvc mockMvc;

	@Test
	public void shouldReturnDefaultMessage() throws Exception {
		this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
				.andExpect(content().string(containsString("Hello, World")));
	}
}
  • WebMvcTest는 MVC쪽만 따로 테스트 할때 사용
    • 테스트 범위를 웹레이어쪽으로 스코프를 지정한다는 의미

 

@WebMvcTest
public class WebLayerTest {

	@Autowired
	private MockMvc mockMvc;

	@Test
	public void shouldReturnDefaultMessage() throws Exception {
		this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
				.andExpect(content().string(containsString("Hello, World")));
	}
}

 

+ Recent posts