Mock 객체 Stubbing Mock 객체의 행동이란, 리턴 값이 있는 메소드는 모두 Null 을 리턴하고 있다. Optional 타입인 경우 Optional.empty로 리턴 Primitive 타입은 모두 Primitive 값을 따르고 있다. Ex. Boolean인 경우 'false' / Integer 혹은 Long인 경우 0 Collection의 경우 모두 비어있는 Collection을 가지고 있다. Void 메소드의 경우 예외를 던지지 않고 아무 일도 발생하지 않는다. Stubbing이란, Mock 객체의 행동을 조작하는 것을 말한다. Mock객체의 when 메소드를 활용하여 Stubbing을 진행해보자. Ex. 리턴값이 있는 when 메소드 활용 1 @Mock MemberService membe..
Mock 객체 만들기 Mock 객체는 언제 만들까? Service에서 인터페이스를 참조하는데, 로직을 구성할 때 해당 인터페이스에 있는 메소드들을 가져와 로직을 구성하고자 한다. 그러나 인터페이스의 구현체는 따로 구현되어 있지 않다. 이럴 때, 인터페이스가 구현되어 있다는 가정하에 구성한 Service 로직을 실행하고자 할 때 Mock 객체를 만들어 테스트 한다. 이 때, Mock 객체는 참조하는 인터페이스가 되는 것이다. Mock 객체를 만들어보자 @Test void createStudyService() { //1. memberService와 studyRepository를 파라미터로 받아 우리가 구성한 service를 테스트해보려고 하는데, // memberService와 studyRepository는..
Mockito Mock : 진짜 객체와 비슷하게 동작하지만, 프로그래머가 직접 그 객체의 행동을 관리하는 객체. Mockito : Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. DB, API 호출 시 API 및 DB를 Mock 객체로 만들고 각각의 행동들이 어떻게 동작할지에 대해 Mockito를 사용해서 코딩하며 테스트를 진행한다. - 실제 API가 없거나 DAO나 Repository가 구현되어 있지 않아도 테스트가 가능하다. 스프링 부트와 스프링 부트가 아닐 때 Mockito 1. 스프링 부트를 사용 시 2.2 버전 이후에는 spring-boot-starter-tesat에서 자동으로 Mockito를 추가해준다. 2. 스프링 부트가 아닌 경우 org.mockito mockito-..
JUnit 5: 테스트 인스턴스 테스트 메소드마다 새로운 인스턴스를 만들어 실행한다. //테스트 인스턴스 int value = 1; @Test @DisplayName("스터디 만들기 테스트 인스턴") void testInstance() { System.out.println(this); System.out.println(value++); } @Test @DisplayName("스터디 만들기 테스트 인스턴스 ") void testInstance2() { System.out.println(this); System.out.println(value++); } value 값을 1로 선언 후 각 테스트 메소드에서 value를 증가하여 각각 2 또는 3 이 출력될 거 같지만 결과는 다르다. 둘 다 1이라는 결과가 나타..
JUnit 5 : 테스트 반복하기 2부 인자 값들의 소스 @ValueSource 파라미터를 나열한다. @NullSource, @EmptySource, @NullAndEmptySource 기존 파라미터에 Null 혹은 빈값의 파라미터를 추가할 수 있다. @EnumSource @MethodSource @CsvSource @CsvFileSource @ArgumentSource 인자 값 타입 변환 암묵적인 타입 변환 명시적인 타입 변환 @ValueSource로 선언한 파라미터(@ValueSource(ints {10, 20, 40}))를 객체의 생성자에 파라미터로 하여 객체를 생성한 후 객체로 접근하여 가져온 값들을 테스트에서 확인해보자. 즉, 커스텀한 타입으로 변환하여 파라미터를 받고자 할 땐, Converte..
JUnit : 테스트 반복하기 어떤 테스트에 대해서 반복적으로 테스트를 진행할 수 있다. @DisplayName("스터디 만들기") @RepeatedTest(value = 10, name = "{displayName}, {currentRepetitions}/{totalRepetitions}" ) void create_study(RepetitionInfo repetitionInfo) { System.out.println("test" + repetitionInfo.getCurrentRepetition() + "/" + repetitionInfo.getTotalRepetitions()); } {displayName} : @DisplayName {currentRepetitions} : 현재 반복한 횟수 {tot..
JUnit5 : 커스텀 태그 JUnit에서 제공하는 어노테이션들을 메타 어노테이션으로 사용할 수 있다. 즉, 사용자가 만든 어노테이션에 JUnit 어노테이션을 넣어 사용할 수 있다는 것이다. //사용자 정의 어노테이션 //FastTest @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Test @Tag("fast") public @interface FastTest { } //SlowTest @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Test @Tag("slow") public @interface FastTest { } @FastTest @DisplayName("스터..
JUnit 5 : 태깅과 필터링 각 테스트 그룹을 만들고, 원하는 테스트 그룹만 테스트를 진행할 수 있는 기능이다. 여러 조건으로 우리가 원하는 태그를 붙여 해당 태그를 지정하여 테스트를 진행할 수 있는 것이다. @Tag 테스트 메소드에 태그를 추가할 수 있다. 하나의 테스트 메소드에 여러 태그를 사용할 수 있다. 소스로 확인해보자 Fast 태그와 slow 태그를 사용하여 용도에 맞게 테스트를 진행해보자 즉, 실행결과가 빠르게 나타나는 테스트를 fast, 실행결과가 느리게 나타나는 테스트는 slow로 가정하자 @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class TagTest { @Test @DisplayNam..
- Total
- Today
- Yesterday
- 인프런
- ifPresent
- 자바8
- 이펙티브자바
- flatMap
- try with resources
- 김영한
- Spring
- 이펙티브 자바
- package-private
- 빌더 패턴
- 정적팩터리메서드
- Effective Java
- try catch finally
- springboot
- 점층적 생성 패턴
- 빈 순환 참조
- 생성자
- 복사 팩토리
- @Lazy
- jdk버전
- java
- junit
- JPA
- effectivejava
- mustache
- 팩토리 메소드 패턴
- java8
- 스프링부트
- 연관관계
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |