동시성 테스트
·
TDD
package sample;import static org.junit.jupiter.api.Assertions.*;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import org.junit.jupiter.api.Test;public class SampleTest { private AtomicInteger counter = new AtomicInteger(0); public void increment() { counter.incrementAndGet()..
TDD 사이클
·
TDD
TDD 사이클- 1. 실패하는 테스트 코드 작성하기- 2. 테스트 통과시키기- 3. 이전 두 단계에서 코드 추가하거나 리팩터링 하기   실패하는 테스트 코드 작성하기import static org.junit.jupiter.api.Assertions.assertEquals;import org.junit.jupiter.api.Test;class StringLengthCalculatorTest { @Test void testCalculateLength() { StringLengthCalculator calculator = new StringLengthCalculator(); int length = calculator.calculateLength("hello"); ..
Test Smell 처리 방법
·
TDD
불필요한 테스트 코드불필요한 try-catch 지양- 가독성을 위해 try catch가 아닌 throws를 사용하자 (해당 예외 발생시 테스트 실패 처리 됨) @Testpublic void testMethod_withTryCatch() { try { MyService service = new MyService(); service.doSomething(); } catch (Exception e) { fail("Exception should not have been thrown"); }} @Testpublic void testMethod_withThrows() throws Exception { MyService service = new MyServi..
Mock과 Stub의 차이
·
TDD
Stub- 호출에 대해 미리 고정된 응답을 제공하는 것- 상태 기반 테스트에 사용- 예: 데이터베이스와 통신하는 코드를 테스트할 때, 실제로 DB와 연결하지 않고, 미리 정의된 데이터를 반환하도록 설정. import lombok.RequiredArgsConstructor;import org.springframework.stereotype.Service;@Service@RequiredArgsConstructorpublic class UserService { private final UserRepository userRepository; public String getUserName(Long userId) { return userRepository.findNameById(userId)..
좋은 테스트의 요건 - RIGHT BICEP
·
TDD
RIGHT BICEPRIGHT- 결과가 올바른지 검증할 수 있어야 함.  package unit02;public class Calculator { private int result; public int add(int a, int b) { result = a + b; return result; } public int subtract(int a, int b) { return a - b; } public int multiply(int a, int b) { return a * b; } public int divide(int a, int b) { if (b == 0) throw new IllegalArgumentException("Division by zero"); return a / b; } publ..
좋은 테스트의 요건 - FIRST
·
TDD
FIRSTF (Fast) - 빠른 속도:테스트는 빠르게 실행되어야 함시스템이 커지면 단위 테스트도 실행하는데 오래 걸리기 때문속도를 빠르게 하기 위해서 보통 3가지의 방법이 사용된다.선택적 컨텍스트 로딩: @WebMvcTest, @DataJpaTest와 같은 애너테이션을 사용해 필요한 부분만 로드하여 전체 애플리케이션 컨텍스트 로딩(스프링 애플리케이션이 실행될 때 모든 필요한 빈(bean)과 의존성을 설정하고 초기화하는 과정)을 피함.의존성 모킹: @MockBean으로 외부 서비스와 의존성을 모킹하여 불필요한 리소스 로딩을 줄임.병렬 테스트 실행: 테스트를 병렬로 실행해 멀티코어 프로세서를 효과적으로 활용함으로써 테스트 시간을 단축.JUnit5 설정 파일 작성: junit-platform.properti..
단위 테스트의 기초
·
TDD
단위 테스트- 어떤 단위의 코드를 테스트하려고 테스트 코드를 작성하는 것=> 이러한 단위 테스트를 작성하는 이유는, 1. 어떤 기능을 막 작성했고, 그것이 예상한대로 동작하는지 확인하기 위해2. 작성한 변경사항을 문서화해서 자신과 다른 사람들이 나중에 이해하도록 하기 위해3. 기존 동작을 깨뜨리지 않았는지 확인하기 위해4. 시스템의 현재 동작을 확인하기 위해5. 서드 파티 코드가 더 이상 기대한대로 동작하지 않는지 확인하기 위해 단위 테스트와 통합 테스트의 차이-단위 테스트는 소프트웨어의 가장 작은 단위, 즉 개별적인 함수나 메서드를 테스트하는 것이고, 통합 테스트는 소프트웨어의 여러 구성 요소(모듈, 서비스, 시스템 등)를 결합하여 이들이 함께 올바르게 동작하는지 검증하는 테스트. https://f-l..
스프링 배치 반복 및 오류 제어
·
Spring
Repeat- 특정 조건이 충족될 때까지 Job또는 Step을 반복함- RepeatOperation을 사용해서 Step의 반복과 Chunk 반복을 함- 기본 구현체로 RepeatTemplate을 제공함 반복을 종료할 것인지 여부 결정 세 가지 항목RepeatStatus- 스프링 배치의 처리가 끝났는지 판별하기 위한 열거형 enum=> CONTINUABLE : 작업이 남아있음=> Finished : 더이상의 반복이 없음 CompletionPolicy - RepleatTemplatedml iterated 메소드 안에서의 반복을 중단할지 결정- 정상 종료를 알리는데에 사용함.- 실행 횟수 또는 완료시기, 오류 발생시 수행할 작업에 대한 반복여부 결정- 정상 종료를 알리는데 사용함.ExceptionHandler..
Spring Batch - ItemProcessor, ItemWriter
·
Spring
FlatFileItemWriter- 2차원으로 표현된 유형된 파일을 처리하는 ItemWriter LineAggregator - Item을 받아서 String으로 변환하여 리턴- FiledExtractor를 사용해서 처리함- 구현체=> PassThroughLineAggregator / DelimitedLineAggregator / FormatterLineAggregator FieldExtractor- 전달받은 Item 객체의 필드를 배열로 만들고, 배열을 합쳐서 문자열을 만들도록 구현하도록 제공하는 인터페이스- 구현체=> BeanWrapperFieldExtractor=> PassThroughFieldExtractor JsonFileItemWriter- 객체를 받아 JSON String으로 변환하는 역할을 ..
takoyummy
'분류 전체보기' 카테고리의 글 목록