Junit
자바 프로그래밍 언어용 단위 테스트 프레임워크
아래는 Junit LifeCycle 어노테이션이다.
Annotation | Description |
---|---|
@Test | 테스트용 메소드를 표현하는 어노테이션 |
@BeforEach | 각 테스트 메소드가 시작되기 전에, 실행되어야 하는 메소들 표현 |
@AfterEach | 각 테스트 메소드가 시작된 후 실행되어야 하는 메소드르 표현 |
@BeforeAll | 테스트 시작 전에 실행되어야 하는 메소드를 표현(Static 처리 필요) |
@AfterAll | 테스트 종료 후에 실행되어야 하는 메소드를 표현(Static 처리 필요) |
@SpringBootTest
, @WebMvcTest
어노테이션을 사용해 테스트⭐️ @WebMvcTest vs @SpringBootTest
@SpringBootTest
는 프로젝트의 전체 컨텍스트를 로드하여 빈을 주입하기 때문에 속도가 느리고, 통합 테스트를 할 때 많이 사용한다.
필요한 빈만을 등록하여 테스트를 진행하고자 한다면 슬라이스 테스트 어노테이션인@WebMvcTest
를 사용하는 것이 효율적이다.
Mock: 껍데기만 있는 객체
MockBean: 기존에 사용되던 Bean의 껍데기만 가져오고 내부의 구현 부분은 모두 사용자에게 위임한 상태
→ 따라서 어떤 메소드에 어떤 값이 입력되었을 때 특정 값을 리턴하도록 개발자가 조작이 가능하다
Spy: 조직 전체에 퍼져있지 않고, 조직 구성원 중 1명 혹은 일부분
SpyBean: given에서 선언한 코드 외에는 전부 실체 객체의 것 사용
@WebMvcTest(MemberController.class)
class MemberControllerUnitTest {
@Autowired
MockMvc mvc;
@MockBean
MemberService memberService;
@Test
@DisplayName("멤버 전체조회 테스트")
void getMemberListTest() throws Exception {
List<Member> members = new ArrayList<>();
members.add(Member.builder().name("John").build());
given(memberService.list()).willReturn(members);
mvc.perform(get("/api/member"))
.andExpect(status().isOk())
.andExpect(content().string(containsString("John")));
}
}
✏️ 참고