MockK란 무엇인가? MockK는 코틀린에서 테스트 시 목(Mock) 객체를 생성하는 것을 돕는 라이브러리이다. 기존에 목 객체를 만들기 위해서는 인터페이스를 목 클래스로 직접 구현을 해야 했는데, MockK를 사용하면 간단하게 목 객체를 생성할 수 있다. Gradle에 MockK 의존성 추가하기 Gradle에 MockK에 대한 의존성은 다음과 같이 추가해주면 된다. dependencies { ... // MockK 라이브러리 testImplementation("io.mockk:mockk:1.13.8") } MockK의 사용 MockK를 사용하는 것은 매우 간단하다. 예를 들어 다음과 같은 UserProfileFetcher이 있다고 해보자. class UserProfileFetcher( private ..
Kotlin
테스트의 Assert의 종류 우리는 테스트를 진행할 때, 단언(Assert)을 통해 기대값과 실제 값을 비교한다. 단언의 기대값과 실제 값이 다르다면 테스트는 실패할 것이고, 같다면 성공한다. 이러한 단언은 단순하게는 객체의 함수를 호출하고 결과값을 받아 해당 값을 비교하는 것부터 시작해, 객체와의 상호 작용을 확인하는 단언들 또한 존재한다. 이번 글에서는 단언에 어떤 종류가 있는지를 알아봄으로써 각 테스트 상황에 맞는 단언을 사용할 수 있도록 한다. 함수의 결과를 확인하는 단언 우리가 다룰 첫 단언은 함수의 결과를 확인하는 단언이다. 함수의 결과를 확인하는 단언은 가장 간단한 단언으로, 입력값과 출력 값이 같아야 하기 때문에 인터페이스의 구현체가 달라지더라도 테스트는 변경될 필요가 없다. 예를 들어 다..
Test Doubles란 무엇인가? 테스트 대상 객체가 다른 객체와 의존성이 있는 경우를 생각해보자. 만약 객체를 테스트 하기 위해 의존성이 있는 객체에 대한 실제 구현체를 사용한다면, 의존성이 있는 객체의 구현체에 의해 테스트가 실패할 수 있다. 이런 경우 실제 구현체 대신 해당 객체의 동작을 모방하는 객체를 만들어 테스트에 영향이 없도록 만들어야 한다. 이 때 의존성 있는 객체의 동작을 모방하는 객체를 바로 Test Doubles라 부른다. Test Doubles를 사용하기 위한 환경 설정 Test Doubles를 사용하기 위해 다른 객체에 의존성이 있는 UserProfileFetcher 객체를 만들어보자. UserProfileFetcher은 UserRepository 객체로부터 유저의 이름(name..
private 함수 테스트 시 문제점 다음과 같은 양의 정수에 대해 곱셈을 실행하는 PositiveNumberMultiplier 클래스가 있다고 하자. 이 PositiveNumberMultiplier클래스는 정수를 가변인자로 받아 곱셈을 실행하는 multiplyAll 메서드를 가지고 있으며, multiplyAll메서드는 내부에서 가변인자로 들어온 모든 값이 양수인지 확인하는 isValid 함수를 가진다. class PositiveNumberMultiplier() { fun multiplyAll(vararg numbers: Int): Int { if (isValid(*numbers)) { throw IllegalArgumentException("인자는 양수여야 합니다") } return numbers.fo..
대량 데이터에 대한 테스트 필요성 모든 클래스가 클린 아키텍처를 기반으로 만들어지면 좋겠지만, 프로그램이 복잡해지고 많은 요구사항이 들어갈 수록 클래스의 함수가 점점 복잡해질 수 있다. 이런 경우 수 많은 테스트 케이스가 생기게 되는데, 이런 테스트를 위해 @ParameterizedTest와 @CsvFileSource를 함께 사용해 테스트를 진행할 수 있다. csv파일 준비하기 테스트를 위한 csv파일은 src/test/resources 경로에 넣으면 된다. SimpleMultiplierTestCase.csv 파일을 다음과 같이 만들어 resources 폴더 아래에 넣도록 하자. 그러면 CsvFileSource를 사용해 테스트 하기 위한 준비가 마쳐진다. 개인적으로 CsvFileSource를 사용할 때 ..