기능 테스트: 애플리케이션을 사용하는 사용자 입장에서 애플리케이션이 제공하는 기능이 올바르게 동작하는지를 테스트
통합 테스트 : 애플리케이션을 만든 개발자 또는 개발팀이 테스트의 주체가 됨
슬라이스 테스트 : 애플리케이션을 특정 계층으로 쪼개어서 하는 테스트
단위 테스트 : 메서드 단위의 테스트
public class JunitDefaultStructure {
@Test
public void test1() {
// 테스트 로직
}
@DisplayName("assertEquals Test")
@Test
public void asserionTest() {
String expected = "Hello";
String actual = "Hello";
assertEquals(expected, actual); // 기대값과 실제 결과값이 같은지 검증
}
@DisplayName("AssertionNull() Test")
@Test
public void assertNotNullTest() {
String name = CryptoCurrency.map.get("ETH");
assertNotNull(name, "should be not null"); // 테스트 대상 객체가 null이 아닌지 테스트
}
public class CryptoCurrency {
public static Map<String, String> map = new HashMap<>();
static {
map.put("BTC", "Bitcoin");
map.put("ETH", "Ethereun");
}
}
}
public class JunitTest {
@BeforeEach // 테스트 케이스가 각각 실행될 때 마다 테스트 케이스 실행직전에 먼저 실행
@Test
public void beforeEachTest() {
// 테스트 로직
}
@BeforeAll // 테스트 케이스가 실행되기 전에 딱 한번 실행
public static void initAll() {
map = new HashMap<>();
map.put("BTC", "Bitcoin");
map.puut("ETH", "Ethereum");
}
class MockTest {
@Autowired
private MockMvc mockMvc;
@Autowired
Private Gson gson;
@MockBean // Mockito Mock 객체를 생성하고 주입
private MemberService memberService;
@Autowired
private MemberMapper mapper;
@Test
void memberTest() throws Exception {
// given
MemberDto.Post post = new MemberDto.Post("hgd@gmail.com",
"홍길동",
"010-1234-5678");
Member member = mapper.memberPostToMember(post); // post 변수를 재사용하기 위해 MemberMapper로 변환
member.setMemberId(1L); // memberId 추가
// stubbiong 메서드 // given: Mock 객체가 특정 값을 리턴하는 동작을 지정
given(memberService.createMember(Mockito.any(Member.class)))
.willReturn(member); // createMember()메서드가 리턴할 Stub 데이터
String content = gson.toJson(post);
// when
ResultActions actions =
mockMvc.perform(
post("/v11/members")
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON)
.content(content)
);
// then
actions
.andExpect(status().isCreated())
.andExpect(header().string("Location", is(startsWith("/v11/members/"))));
}