1. dependency
<!-- jUnit5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<!-- mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.2.4</version>
<scope>test</scope>
</dependency>
주의
"java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig" 오류가 발생하면
servlet-api버전을 3.1.0 이상으로 올려야 한다.
2. 서버 구성
2-1. HomeController
@RestController
public class HomeController {
@Autowired
MemberService mService;
@GetMapping(path = "/select")
public Member select(Member member) {
Member mem = mService.select(member);
return mem;
}
}
2-2. MemberService
@Service
public class MemberService {
@Autowired
MemberRepository mRepo;
public Member select(Member member) {
member = mRepo.findById(member.getId()).get();
return member;
}
}
2-3. MemberRepository
public interface MemberRepository extends JpaRepository<Member, Long>{
}
2-4. Member
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name="member")
public class Member {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY, generator="CUST_SEQ")
private Long id;
private String name;
private String email;
@CreationTimestamp
@JsonFormat(pattern = "yyyy-MM-dd kk:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime create_date;
}
3. 테스트 코드 작성
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/appServlet/*"})
class HomeControllerTest {
@Autowired
HomeController homeController;
MockMvc mockMvc;
@BeforeEach
public void before() {
mockMvc = MockMvcBuilders.standaloneSetup(homeController)
.addFilter(new CharacterEncodingFilter(StandardCharsets.UTF_8.name(), true))
.build();
}
@Test
void controllerTest() throws Exception {
mockMvc.perform(get("/select?id=2"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(print());
}
}
!!! - @ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/appServlet/*"}) - 설정 로드
- 테스트 빈 주입을 하려면 따로 설정파일을 작성해서 테스트용 DB등을 설정 할 수있다.
!!! - @BeforeEach - 테스트 시작시 mockMvc 객체 생성 - 서버를 구동하지 않고 리퀘스트 요청을 처리 할 수있게 도와준다.
!!! - .addFilter(new CharacterEncodingFilter(StandardCharsets.UTF_8.name(), true)) - 인코딩 설정
!!! - mvc.perform(get("/select?id=2")) - get메소드로 리퀘스트를 수행한다.
!!! - .andExpect(MockMvcResultMatchers.status().isOk()) - 리퀘스트가 정상적으로 수행됐는지 확인한다(response code : 200)
!!! - .andDo(print()); - 리퀘스트 수행결과를 출력한다.
----
우리가 Spring Legacy 프로젝트에서 테스트 케이스 작성법은 찾아봐도 잘 나오지 않는다.
그리고 jUnit5가 공개된지도 짧지않은 시간이 지났고, 프레임워크로서 자리도 잘 잡아가고 있다.
그런 의미에서 Spring Legacy 프로젝트에서 통합테스트와 단위테스트를 하나씩 포스팅하려고한다.
이메일전송 (0) | 2021.09.08 |
---|---|
[AOP] 환경설정 - Maven (0) | 2021.05.24 |
[Hibernate] Spring 5 - JPA - find메소드를 추가하려고할때 주의할점 (0) | 2021.05.13 |
[Hibernate] Spring 5 - JPA - Setting (0) | 2021.05.13 |
Spring-Boot(Gradle) jar배포 (0) | 2021.04.21 |
댓글 영역