@SpringBootTest에서 MockMvc를 주입하여 사용하기 위해서는 @AutoConfigureMockMvc 어노테이션을 붙여주어야 한다.
@SpringBootTest
@AutoConfigureMockMvc // MockMvc를 생성한다.
public class exmapleTest {
@Autowired
MockMvc mockMvc; // 생성된 MockMvc 빈을 주입받아 테스트에 사용한다.
…
}
WebEnvironment.Mock (기본값)
WebEnvironment.RANDOM_PORT
WebEnvironment.DEFINED_PORT
WebEnvironment.NONE
@Transactional
을 명시하지 않아도 알아서 롤백된다. 정확히는 @DataJpaTest의 내부를 까보면 이미 @Transactional
을 포함하고 있다.@WebMvcTest(SampleController.class)
public class SampleControllerTest extends TestCase {
@MockBean
SampleService mockSampleService;
@Autowired
MockMvc mockMvc;
@Test
public void hello() throws Exception {
when(mockSampleService.getName()).thenReturn("jerry");
mockMvc.perform(get("/hello"))
.andExpect(content().string("hello jerry"));
}
}
테스트 코드에서 @Nested
클래스로 비슷한 함수를 묶어 가독성을 좋게 만든다.
public class ExampleTest {
@Test
public void testAsuccess() { ... }
@Test
public void testAfail() { ... }
@Test
public void test1success() { ... }
@Test
public void test1success() { ... }
@Test
public void test2success() { ... }
@Test
public void test2fail() { ... }
}
public class ExampleTest {
@Nested
class testA {
@Test
public void success() { ... }
@Test
public void fail() { ... }
}
@Nested
class testNumber {
@Nested
class test1 {
@Test
public void success() { ... }
@Test
public void fail() { ... }
}
@Nested
class test2 {
@Test
public void success() { ... }
@Test
public void fail() { ... }
}
}
}