java

    [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 사용 시 No tests found for given includes 오류 수정 방법

    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) 이런 애러가 나는 이유는 테스트를 실행할..

    [JUnit5] @AfterEach 사용해 테스트 실행 이후 작업 처리하기

    @AfterEach는 언제 사용하는가? @AfterEach를 사용하면, 각 테스트 이후 실행되어야 하는 작업을 설정할 수 있다. 예를 들어 영속적인 데이터들이 초기화 되어야 하는 경우 사용될 수 있으며, 대표적으로 테스트 시 사용하는 데이터 베이스를 테스트 하는 경우 인메모리 데이터베이스를 사용하게 되는데, 이런 데이터 베이스를 초기화 할 때 사용할 수 있다. @AfterEach 사용 예시 예를 들어 다음과 같이 MyDatabase라는 이름의 RoomDataBase가 있고, 테스트에 MyDatabase를 사용한다면, 마지막에 꼭 close를 실행해줘야 테스트 시 리소스를 정리할 수 있다. 이때, 다음과 같이 @AfterEach를 사용해 myDatabase를 close 해줌으로써 각 테스트 이후 데이터 베..

    [Kotlin] Stack 다루는 방법 한 번에 정리하기 : Kotlin의 Stack의 한계와 ArrayDeque를 사용한 해결 방안

    Stack 이란 무엇인가? Stack은 마지막에 들어온 값이 제일 먼저 나가는(LIFO) 특징을 가진 자료구조로, 값을 추가하고 빼내는데 O(1)의 시간 복잡도로 가능해 다양한 곳에 활용될 수 있는 자료 구조이다. *예를 들어 안드로이드에서는 화면(Fragment) 변경 시 이전 화면의 목록을 관리하는데 Stack 자료 구조를 사용하고 있다. 한 번 Stack이 어떻게 동작하는지 그림으로 살펴보자. Stack은 값을 여러개 담을 수 있는 하나의 Container을 가지고 있으며, 값을 집어넣으면 아래와 같이 순서대로 Container에 쌓인다. 예를 들어 Element1, Element2를 Stack에 순서대로 쌓으면 아래와 같은 형태가 된다. 값을 빼낼 때는 무조건 위에 있는 값부터 빼내진다. 즉, S..