Unit Testing

이전 글 요약 이전 글에서는 mockk 함수를 사용해 Mock 객체를 만드는 방법에 대해 알아보았고, val userRepository : UserRepository = mockk() val contactRepository : ContactRepository = mockk() val userProfileFetcher = UserProfileFetcher( userRepository = userRepository, contactRepository = contactRepository ) every를 사용해 목 객체의 함수가 호출될 때 반환 값을 반환하는 방법에 대해 알아보았다. every { contactRepository.getPhoneNumberByUserId(any()) }.returns("010-xx..
MockK란 무엇인가? MockK는 코틀린에서 테스트 시 목(Mock) 객체를 생성하는 것을 돕는 라이브러리이다. 기존에 목 객체를 만들기 위해서는 인터페이스를 목 클래스로 직접 구현을 해야 했는데, MockK를 사용하면 간단하게 목 객체를 생성할 수 있다. Gradle에 MockK 의존성 추가하기 Gradle에 MockK에 대한 의존성은 다음과 같이 추가해주면 된다. dependencies { ... // MockK 라이브러리 testImplementation("io.mockk:mockk:1.13.8") } MockK의 사용 MockK를 사용하는 것은 매우 간단하다. 예를 들어 다음과 같은 UserProfileFetcher이 있다고 해보자. class UserProfileFetcher( private ..
안드로이드 메서드를 사용할 때 생기는 문제점과 원인 안드로이드 전용 클래스의 정적 메서드를 클래스 내부에서 사용한다면 테스트 시 문제가 생긴다. 예를 들어 다음과 같은 테스트 코드를 보자. import android.text.TextUtils import org.junit.Assert.assertTrue import org.junit.Test class ExampleUnitTest { @Test fun testTextIsEmpty() { val isEmpty = TextUtils.isEmpty("") assertTrue(isEmpty) } } 이 테스트는 매우 간단한 테스트로, TextUtils.isEmpty를 호출해 매개 변수로 입력된 문자열이 빈칸인지 확인하기 위한 테스트이다. 하지만 이 테스트를 실..
테스트의 Assert의 종류 우리는 테스트를 진행할 때, 단언(Assert)을 통해 기대값과 실제 값을 비교한다. 단언의 기대값과 실제 값이 다르다면 테스트는 실패할 것이고, 같다면 성공한다. 이러한 단언은 단순하게는 객체의 함수를 호출하고 결과값을 받아 해당 값을 비교하는 것부터 시작해, 객체와의 상호 작용을 확인하는 단언들 또한 존재한다. 이번 글에서는 단언에 어떤 종류가 있는지를 알아봄으로써 각 테스트 상황에 맞는 단언을 사용할 수 있도록 한다. 함수의 결과를 확인하는 단언 우리가 다룰 첫 단언은 함수의 결과를 확인하는 단언이다. 함수의 결과를 확인하는 단언은 가장 간단한 단언으로, 입력값과 출력 값이 같아야 하기 때문에 인터페이스의 구현체가 달라지더라도 테스트는 변경될 필요가 없다. 예를 들어 다..
Test Doubles란 무엇인가? 테스트 대상 객체가 다른 객체와 의존성이 있는 경우를 생각해보자. 만약 객체를 테스트 하기 위해 의존성이 있는 객체에 대한 실제 구현체를 사용한다면, 의존성이 있는 객체의 구현체에 의해 테스트가 실패할 수 있다. 이런 경우 실제 구현체 대신 해당 객체의 동작을 모방하는 객체를 만들어 테스트에 영향이 없도록 만들어야 한다. 이 때 의존성 있는 객체의 동작을 모방하는 객체를 바로 Test Doubles라 부른다. Test Doubles를 사용하기 위한 환경 설정 Test Doubles를 사용하기 위해 다른 객체에 의존성이 있는 UserProfileFetcher 객체를 만들어보자. UserProfileFetcher은 UserRepository 객체로부터 유저의 이름(name..
Dev.Cho
'Unit Testing' 태그의 글 목록 (2 Page)