반응형
hibernate 를 이용한 테스트 코드 작성시 막 crud 에서 rud 를 위한 데이터를 미리 집어 넣어 놓는 디비를 의미한다.
@Before 이후에 들어오기 때문에, @Before 에서는 jpa 저장을 하는 것이 옳다.
@Before 은 각 테스트별로 한번씩 발생하기 때문에 테스트 3개를 가진 before 어노테이션은 3번 코드를 반복하게 되니까 jpa 저장방식을 이용하는 것이 맞다.
@BeforeClass 의 경우는 junit5 에서는 @BeforeAll 을 한다고 하는데, initializing error 로 보아 좀더 작업을 해야 알 것 같다.
하단에 내코드를 첨부 하겠다.
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.json.JacksonJsonParser;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test") //test profile-h2db 사용
@FixMethodOrder(MethodSorters.NAME_ASCENDING) //실행 순서를 메소드 명 순서로 고정
public class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private UserJpaRepo userJpaRepo;
@Autowired
private PasswordEncoder passwordEncoder;
private String token;
@Before
public void setUp() throws Exception {
userJpaRepo.save(User.builder()
.userId(6L)
.role(Role.ROLE_ADMIN)
.userEmail("uiEmail@ui.com")
.userEmailReceiveYn(Boolean.TRUE)
.userTypeCode(3L)
.registerUserId(3L)
.changeUserId(3L)
.name("의정부인")
.password(passwordEncoder
.encode("uiPassword"))
.zipCode("312")
.roadNameAddress("의정부 부대찌개로")
.lotNumberAddress("32번지")
.detailAddress("감나무 골목길")
.phoneNumber("0105465465")
.mobilePhoneNumber("6565454")
.userSid("uiSid")
.companyName("의정부 오뎅식장")
.presidentName("오뎅아줌마")
.companyPhoneNumber("01055454")
.companyRegistrationNumber("0105465465")
.companyAddress("오뎅이기가막혀")
.build());
MultiValueMap<String, String> paramsLogin = new LinkedMultiValueMap<>();
paramsLogin.add("userSid", "uiSid");
paramsLogin.add("password", "uiPassword");
MvcResult result = mockMvc.perform(post("/v1/login").params(paramsLogin))
.andDo(print())
.andExpect(status().isOk())
.andExpect(jsonPath("$.success").value(true))
.andExpect(jsonPath("$.code").value(0))
.andExpect(jsonPath("$.msg").exists())
.andExpect(jsonPath("$.data").exists())
.andReturn();
String resultString = result.getResponse().getContentAsString();
JacksonJsonParser jsonParser = new JacksonJsonParser();
token = jsonParser.parseMap(resultString).get("data").toString();
}
@Test // user 1개 찾기
@WithMockUser(username = "mockUser", roles = {"ADMIN"})
public void findUser() throws Exception {
mockMvc.perform(MockMvcRequestBuilders
.get("/v1/user/4")
.header("X-AUTH-TOKEN", token)
)
.andDo(print())
.andExpect(status().isOk());
}
@Test // user 1개 찾기
public void checkCompanyRegistrationNumber() throws Exception {
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
mockMvc.perform(MockMvcRequestBuilders
.get("/v1/user/check/company-register-number/?company-register-number=015654654654").header("X-AUTH-TOKEN", token)
.params(params))
.andDo(print())
.andExpect(status().isOk());
}
@Test // user 1개 찾기
public void checkUserSid() throws Exception {
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
mockMvc.perform(MockMvcRequestBuilders
.get("/v1/user/check/sid/testSid") .header("X-AUTH-TOKEN", token)
.params(params))
.andDo(print())
.andExpect(status().isOk());
}
@Test // 관리자가 user list 확인
@WithMockUser(username = "mockUser", roles = {"ADMIN"})
public void findAllUser() throws Exception {
mockMvc.perform(MockMvcRequestBuilders
.get("/v1/users")
.header("X-AUTH-TOKEN", token))
.andDo(print())
.andExpect(status().isOk());
}
@Test // user create
@WithMockUser(username = "mockUser", roles = {"ADMIN"})
public void save() throws Exception {
final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("userSid", "saveSid");
params.add("userEmail", "saveSidTest@test.com");
params.add("password", "saveSidPassword");
params.add("name", "김병만");
params.add("role", "ROLE_USER");
params.add("mobilePhoneNumber", "01046054000");
params.add("companyName", "test 아마존 회사");
params.add("presidentName", "test 아마존 company 대표");
params.add("companyRegistrationNumber", "010043000");
params.add("userEmailReceiveYn", "True");
mockMvc.perform(MockMvcRequestBuilders.post("/v1/user").header("X-AUTH-TOKEN", token)
.params(params)).andExpect(status().isOk());
}
@Test // user modify
public void modify() throws Exception {
final MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("userSid", "userSidModify");
params.add("userEmail", "userSidModifyEmail@test.com");
params.add("password", "password");
params.add("name", "김서현");
params.add("role", "ROLE_USER");
params.add("mobilePhoneNumber", "013420000");
params.add("companyName", "test 쿠팡 회사");
params.add("presidentName", "test 쿠팡 company 대표");
params.add("companyRegistrationNumber", "01000243000");
params.add("userEmailReceiveYn", "True");
mockMvc.perform(MockMvcRequestBuilders
.put("/v1/user/2")
.header("X-AUTH-TOKEN", token)
.params(params))
.andDo(print())
.andExpect(status().isOk());
}
@Test // user delete
public void delete() throws Exception {
mockMvc.perform(MockMvcRequestBuilders
.delete("/v1/user/3")
.header("X-AUTH-TOKEN", token))
.andDo(print())
.andExpect(status().isOk());
}
}
참고 링크: beomseok95.tistory.com/302
반응형
'스프링, 자바' 카테고리의 다른 글
css, js import 안될때 (0) | 2020.10.14 |
---|---|
패스트캠퍼스 자바 인강 챌린지 참여 후기 (0) | 2020.10.12 |
Lombok (0) | 2020.10.04 |
스프링 도큐먼트 (0) | 2020.10.03 |
스프링 캐쉬 (0) | 2020.10.03 |