Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- React Natvive
- bfs dfs
- 완전탐색
- 상속 관계 매핑
- 오블완
- FlatList
- web view
- 자료구조
- 원복
- service 테스트
- 티스토리챌린지
- 해외 대외활동
- react
- 구현
- 노마드코더
- multipart upload
- 창의충전소
- 폴더구조
- springboot
- 이영직
- Navigation
- ReactNative
- Project Bee
- 휴대폰 기기
- 백준 1992
- React Native
- 비트마스킹
- 경우의 수
- 버튼 활성화
- BFS
Archives
- Today
- Total
유미의 기록들
[최종 프로젝트] Service 테스트 코드 작성 본문
728x90
반응형
⚠️ SavePartyRequest가 접근 제어자가 protected라서 인스턴스 생성 불가
@AllArgsConstructor(access = AccessLevel.PUBLIC) // Protected에서 Public으로 변경
public class SavePartyRequest {
// ...
}
- 접근 제어자를 public으로 변경
- 정적 팩토리 메서드 추가
- Reflection </aside>
리플렉션
힙 영역에 로드 된 Class 타입의 객체를 통해, 접근 제어자 상관없이 원하는 클래스의 정보에 접근해서 조작할 수 있도록 지원하는 API
장점
- 유연성과 확장성
- 구체적인 클래스를 알지 못해도 동적으로 클래스를 만들어서 의존 관계를 맺어줄 수 있다.
- 개발 규모가 큰 스프링인 경우, 리플렉션을 이용한 Dynamic proxy를 통해서 @AutoWired, @Service, @Controller, @Repository 와 같은 DI 어노테이션을 활용한다.
- 접근 제한 상관없이 테스트 가능
- 밑에서 예제로 보겠지만, 접근 제어자가 private 이더라도 얼마든지 접근해서 조작할 수 있다.
- 즉, private 메서드도 테스트가 가능하다는 소리이다.
- 하지만 이 부분은 정말로 장점인 것인지 생각해볼 문제로 보인다.
해당 생성자를 통해 인스턴스 객체 생성하기
public class RefectionEx {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<? extends Car> carClass = Car.class;
Constructor<? extends Car> constructor = carClass.getDeclaredConstructor(String.class, int.class);
constructor.setAccessible(true);
Car car = constructor.newInstance("jun", 5000);
System.out.println(car);
System.out.println(car.getCarName());
System.out.println(car.getCarPosition());
}
}
• getDeclaredConstructor() 메서드의 인자엔 생성자 인자들의 타입을, newInstance() 메서드의 인자엔 초기화 값을 전달한다.
❓ given() vs when()
when()이 given에서 사용하는데 given-when-then패턴과 겹쳐서 given()이 등장함. 차이점 없음
when()과 given()은 Mock 객체가 수행할 작업을 정의해주는 것이다.
@Testpublicvoidtest1(){
// given(service.signUp(B)).willReturn(true);
when(service.signUp(B)).willReturn(true);
}
service의 signUp 메소드에 B라는 매개변수가 들어온 경우, true를 리턴하도록 Mock 객체의 행위를 정의해줄 때 사용한다.
사실 둘의 차이점은 없다.
BDD (Behavior Driven Development)
행위 주도 개발은 TDD에서 파생된 개발 방법론으로써 코드를 작성하기 이전에 코드가 수행할 행위를 미리 정의를 하는 방식
when() 메소드가 Given-When-Then 패턴의 when과 겹침과 동시에 given에서 작성해주는 작업을 해주고 있습니다.
그래서 이러한 이해하기 힘든 점을 개선하기 위해서 when()과 동일한 given() 메소드가 등장했습니다.
given() 메소드는 org.mockito.BDDMockito 에 정의되어 가독성을 높이기 위해 등장하였으며 Mockito 클래스를 상속하고 있습니다.
728x90
반응형
'대외활동 기록 > 내일배움캠프' 카테고리의 다른 글
[최종 프로젝트] AWS 아키텍처 구축 - 2 (0) | 2024.11.17 |
---|---|
[최종 프로젝트] AWS 아키텍처 구축 - 1 (0) | 2024.11.16 |
Multipart Upload 방식 vs Pre-signedURL 방식 (0) | 2024.11.14 |
[최종 프로젝트] Signed URL 적용 (0) | 2024.11.13 |
[최종 프로젝트] CDN 적용하여 강의 컨텐츠 조회 성능 최적화 (1) | 2024.11.12 |
Comments