모르지 않다는 것은 아는것과 다르다.

전체 글 224

Mockito

Mockito 란? Mock: 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체다. Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. 테스트를 작성하는 자바 개발자 50%+ 사용하는 Mock 프레임워크다. Mock 객체 생성 @ExtendWith(MockitoExtension.class) class StudyServiceTest { @Mock MemberService memberService; @Mock StudyRepository studyRepository; @Test void createStudyService() { StudyService studyService = new StudyService(memberService, stud..

Junit 2022.02.27

Junit5 애노테이션 비교

개요 평소 착각할 수 있는 junit 애노테이션을 비교해 보고자 한다. @Mock vs @MockBean 공통점 둘 모두 특정부분을 단위테스트 하고 싶을때, 테스트하고 싶은 모듈에 의존성을 가지고 있는 모듈을 Mock객체로 대체하고 조작하여 테스트할 수 있다. 둘 모두 given, when. verify 등을 사용하여 행위를 테스트한다. @Mock 모키토 라이브러 내에 존재한다. Mock은 가짜객체를 만드는데 스프링빈에 등록이 안되는 객체이다. 스프링 컨테이너가 DI를 하는 방식이 아니라 객체생성시 생성자에 Mock객체를 직접 주입해준다. 생성자 주입을 사용해야 편하게 사용 가능합니다. 스프링을 띄우지 않으므로 MockBean을 사용할때보다 빠르다. @InjectMocks에 대해서만 해당 클래스안에서 정..

Junit 2022.02.27

# Junit 5 기본 애노테이션

Junit 이란? 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크. 단위 테스트를 작성하는 자바 개발자 93% JUnit을 사용함. Platform: 테스트를 실행해주는 런처 제공. TestEngine API 제공. Jupiter: TestEngine API 구현체로 JUnit 5를 제공. Vintage: JUnit 4와 3을 지원하는 TestEngine 구현체. Junit 5에서 제공하는 기본 애노테이션 @BeforeEach public void beforeEach() { System.out.println("BeforeEach"); } @BeforeAll static void beforeAll(){ System.out.println("BeforeAll"); } @AfterEach public voi..

Junit 2022.02.27

Controller 단위테스트

@WebMvcTest MVC를 위한 테스트, 컨트롤러가 예상대로 동작하는지 테스트하는데 사용된다. 웹상에서 요청과 응답에 대해 테스트할 수 있음. 시큐리티, 필터까지 자동으로 테스트하며, 수동으로 추가/삭제 가능. @SpringBootTest 어노테이션보다 가볍게 테스트할 수 있음. @WebMvcTest 어노테이션을 사용시 다음 내용만 스캔 하도록 제한한다. @Controller @ControllerAdvice @JsonComponent Converter GenericConverter Filter HandlerInterceptor WebMvcConfigurer HandlerMethodArgumentResolver MockBean, MockMVC를 자동 구성하여 테스트 가능하도록 한다. Spring Sec..

Junit 2022.02.27

Bad Request 처리하기

@Valid와 BindingResult (또는 Errors) 스프링 MVC에 해당하는 내용 JS303 애노테이션을 사용해 확인할 수 있다. @Valid 라는 애노테이션을 붙이면 Entity에 바인딩을 할때 애노테이션들에 대한 정보를 참고해서 검증을 수행할 수 있다. 검증을 수행한 결과를 객체 오른쪽에 있는 Errors 객체에 에러값들을 넣어준다. 받은 에러를 확인 해서 Bad Request를 발생시킨다. BindingResult는 항상 @Valid 바로 다음 인자로 사용해야 한다. (스프링 MVC) @NotNull, @NotEmpty, @Min, @Max, ... 사용해서 입력값 바인딩할 때 에러 확인할 수 있다. Errors rejectValue: 필드 에러 reject: 글로벌 에러 BindingEr..

Junit 2022.02.27

Assertion

개요 Assertion 의 여러 기능들을 공부해 보려한다. Assertion 의 여러 기능 import static org.junit.jupiter.api.Assertions.* @Test @DisplayName("스터디 만들기") void create_new_syudy() { Study study = new Study(); assertNotNull(study); assertEquals(StudyStatus.DRAFT, study.getStatus(), () -> "스터디를 처음 만들면 상태값이 DRAFT여야 한다."); } assertEqulas(expected, actual) : 실제 값이 기대한 값과 같은지 확인 assertNotNull(actual) : 값이 null이 아닌지 확인 assertTr..

Junit 2022.02.27

성능 평가 Async Step vs Multi-Thread Step vs Partition Step vs Parallel Step

성능 평가 Async Step vs Multi-Thread Step vs Partition Step vs Parallel Step Async Step single thread 기반과 async Processing 기반을 비교하면 아래와 같다. single thread async thread ItemProcessor와 ItemWriter를 Async로 실행한다. java.util.concurrent에서 제공하는 Future를 기반으로 asynchronous를 실행한다. Async를 사용하기 위해 spring-batch-integration 디펜던시를 추가해 줘야한다. ItemProcessor는 아래와 같이 구현할 수 있다. private AsyncItemProcessor itemProcessor() { I..

Spring Batch 2022.02.27

Skip, Retry

Skip 예외처리 step 수행 중 발생한 특정 Exception과 에러 횟수 설정으로 예외처리 설정 만약 skip(NotFoundNameException.class), skipLimit(3)으로 설정한다면 NotFoundNameException이 3번 발생할 때까지는 에러를 skip 한다. 4번째에서 Job과 Step의 상태가 실패로 끝나며, 배치가 중지된다. 여기서 에러 발생 전까지는 모두 정상처리된 상태로 남는다. 그렇기 때문에 오류가 난 다음부터 다시 시작해야 된다. -> 안 그러면 중복이 발생함 ex> 10개의 chunk 중 1~9까지 정삭으로 작동하고 10에서 오류가 났다면 -> 배치 재 실행 시 10번째 chunk부터 처리하도록 배치를 구현해야 된다. .faultTolerant() .skip..

Spring Batch 2022.02.27

StepListener

StepListener 위에서 구현한 StepExecutionListener 또한 StepListener를 상속받은 Listener이다. StepListener를 상속받는 Listener의 종류로는 아래와 같다. StepExecutionListener SkipListener onSkipInRead : @OnSkipInRead ItemReader에서 Skip이 발생한 경우 호출 onSkipInWrite : @OnSkipInWrite ItemWriter에서 Skip이 발생한 경우 호출 onSkipProcess : @OnSkipInProcess ItemProcessor에서 Skip이 발생한 경우 호출 ItemReadListener beforeRead : @BeforeRead ItemReader.read() 메..

Spring Batch 2022.02.27