Kotlin

@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..
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 {..
반복된 테스트가 필요한 이유 일반적으로 멀티 스레드 환경에서 동작하는 코드를 작성했을 때, 경쟁상태 문제로 인해 간헐적으로 버그가 날 수 있다. 이렇게 간헐적으로 버그를 발생 시키는 코드에 대한 테스트 코드를 작성하면 Flacky Test 문제가 생긴다. *결과가 일관되지 않는 테스트를 :lacky Test 라고 부른다 이런 경우 JUnit4에서는 테스트를 반복하기 위해서는 반복하는 코드를 직접 넣어주어야 했고, 이렇게 하나의 테스트에서 반복해서 테스트를 실행한다면, 넣는다면 몇 번째 테스트에서 실패했는지, 몇 번이나 테스트를 실패했는지 알 수 없는 문제가 있었다. @Test fun dummyTest() { repeat(100) { runTest { val result = contentSearcher.s..
JUnit 의존성 설정 시 발생하는 오류와 해결 방법 JUnit5를 사용하기 위해서는 다음 의존성을 추가해야 한다. dependencies { // JUnit5 테스트 프레임워크 testImplementation("org.junit.jupiter:junit-jupiter-api:5.10.0") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.0") ... } 하지만, 이 둘을 사용해 테스트를 실행하면 다음과 같은 오류가 난다. Execution failed for task ':test'. > No tests found for given includes: [SimpleTest](--tests filter) 이런 애러가 나는 이유는 테스트를 실행할..
@AfterEach는 언제 사용하는가? @AfterEach를 사용하면, 각 테스트 이후 실행되어야 하는 작업을 설정할 수 있다. 예를 들어 영속적인 데이터들이 초기화 되어야 하는 경우 사용될 수 있으며, 대표적으로 테스트 시 사용하는 데이터 베이스를 테스트 하는 경우 인메모리 데이터베이스를 사용하게 되는데, 이런 데이터 베이스를 초기화 할 때 사용할 수 있다. @AfterEach 사용 예시 예를 들어 다음과 같이 MyDatabase라는 이름의 RoomDataBase가 있고, 테스트에 MyDatabase를 사용한다면, 마지막에 꼭 close를 실행해줘야 테스트 시 리소스를 정리할 수 있다. 이때, 다음과 같이 @AfterEach를 사용해 myDatabase를 close 해줌으로써 각 테스트 이후 데이터 베..
Dev.Cho
'Kotlin' 태그의 글 목록 (8 Page)