Testing Codes/JUnit5

    [JUnit5] Private 함수에 대한 테스트 방법

    private 함수 테스트 시 문제점 다음과 같은 양의 정수에 대해 곱셈을 실행하는 PositiveNumberMultiplier 클래스가 있다고 하자. 이 PositiveNumberMultiplier클래스는 정수를 가변인자로 받아 곱셈을 실행하는 multiplyAll 메서드를 가지고 있으며, multiplyAll메서드는 내부에서 가변인자로 들어온 모든 값이 양수인지 확인하는 isValid 함수를 가진다. class PositiveNumberMultiplier() { fun multiplyAll(vararg numbers: Int): Int { if (isValid(*numbers)) { throw IllegalArgumentException("인자는 양수여야 합니다") } return numbers.fo..

    [JUnit5] @ParameterizedTest와 @CsvFileSource 함께 사용해 대량 데이터 테스트 하기

    대량 데이터에 대한 테스트 필요성 모든 클래스가 클린 아키텍처를 기반으로 만들어지면 좋겠지만, 프로그램이 복잡해지고 많은 요구사항이 들어갈 수록 클래스의 함수가 점점 복잡해질 수 있다. 이런 경우 수 많은 테스트 케이스가 생기게 되는데, 이런 테스트를 위해 @ParameterizedTest와 @CsvFileSource를 함께 사용해 테스트를 진행할 수 있다. csv파일 준비하기 테스트를 위한 csv파일은 src/test/resources 경로에 넣으면 된다. SimpleMultiplierTestCase.csv 파일을 다음과 같이 만들어 resources 폴더 아래에 넣도록 하자. 그러면 CsvFileSource를 사용해 테스트 하기 위한 준비가 마쳐진다. 개인적으로 CsvFileSource를 사용할 때 ..

    [JUnit5] @ParameterizedTest와 @CsvSource같이 사용해 다양한 입력값이 필요한 상황 테스트 하기

    @ValueSource를 사용한 @ParameterizedTest의 한계 이전 글에서는 SimpleMultiplier 객체에 대해 @ParameterizedTest와 @ValueSource를 사용해 다양한 Input 값이 있을 때 Output 값이 정확히 나오는지 테스트를 진행했다. class SimpleMultiplier() { fun multiplyAll(vararg numbers: Int): Int { return numbers.fold(1) { acc, number -> acc * number } } } class SimpleMultiplierTest { lateinit var simpleMultiplier: SimpleMultiplier @BeforeEach fun setUp() { simple..

    [JUnit5] @ParameterizedTest 사용해 서로 다른 변수를 사용해 테스트 실행하기

    ParameterizedTest란? 일반적으로 테스트를 실행할 때는, 함수에 대한 하나의 입력 값만 테스트하지 않는다. 예를 들어 간단한 곱샘 연산을 실행하는 Simple Multiplier가 다음과 같이 있다고 해보자. class SimpleMultiplier() { fun multiplyAll(vararg numbers: Int): Int { return numbers.fold(1) { acc, number -> acc * number } } } 이 SimpleMultiplier에 대한 테스트는 다음과 같이 세가지 경우에 대해 작성될 수 있다. 1. 양의 정수 끼리 곱하는 경우 2. 양의 정수와 음의 정수를 곱하는 경우 3. 0을 포함해 곱하는 경우 class SimpleMultiplierTest {..

    [JUnit5] @RepeatedTest 사용해 테스트 반복 실행하기

    반복된 테스트가 필요한 이유 일반적으로 멀티 스레드 환경에서 동작하는 코드를 작성했을 때, 경쟁상태 문제로 인해 간헐적으로 버그가 날 수 있다. 이렇게 간헐적으로 버그를 발생 시키는 코드에 대한 테스트 코드를 작성하면 Flacky Test 문제가 생긴다. *결과가 일관되지 않는 테스트를 :lacky Test 라고 부른다 이런 경우 JUnit4에서는 테스트를 반복하기 위해서는 반복하는 코드를 직접 넣어주어야 했고, 이렇게 하나의 테스트에서 반복해서 테스트를 실행한다면, 넣는다면 몇 번째 테스트에서 실패했는지, 몇 번이나 테스트를 실패했는지 알 수 없는 문제가 있었다. @Test fun dummyTest() { repeat(100) { runTest { val result = contentSearcher.s..