unit testing
[Mockito] ArgumentCaptor 사용해 객체의 interaction 기록하기
ArgumentCaptor 란? ArgumentCaptor란 interaction을 기록하는 Mock 타입의 Test Double을 만드는 객체이다. 즉, ArgumentCaptor은 객체의 interaction을 기록한다. ArgumentCaptor 사용하기 위한 환경 설정 ArgumentCaptor을 사용하기 위해서 앞선 글 https://simcode.tistory.com/12 의 환경을 가져와서 LoginUseCase, LoginUseCaseResult, LoginRepository, LoginRepositoryResult를 사용한다. 환경 설정 부분을 읽도록 하자. ArgumentCaptor 사용한 테스트 만들기 LoginUseCase의 logIn메서드에서 userName과 password변형이..
Unit Testing에서 Test Double이 필요한 이유는 무엇일까?
Test Double이란? class A에 대한 테스트를 하고 싶은데 class B가 다른 class B와 의존성이 있을 경우 어떻게 해야할까? 이 경우 간단하게 생각하면 class B를 인스턴스화 하면 된다고 생각할 수 있다. 하지만 이런 경우 class B를 실제로 인스턴스화 하면 class B로 인해 class A의 테스트에 문제가 생길 수 있다. 또한 class A의 테스트가 class B에 의존성을 갖는 것 또한 옳은 테스트 방향이 아니다. 또한 어떤 경우에는 classB를 인스턴스화 하는 것이 불가능할 수도 있다. 이런 문제들을 해결하기 위한 것이 바로 Test Double이다. Test Double은 class B를 임의의 객체로 대체해서 class B의 동작을 모방해서 class A에서 사..
@Before Annotation 사용해 테스트 환경 설정하기
이전 테스트와 문제점 이전에 MinuteValidatorTest에서 두가지 테스트를 진행했고 MinuteValidator을 다음과 같이 테스트 내부에서 초기화했다. internal class MinuteValidatorTest { @Test fun testMinuteValidator() { val minuteValidator = MinuteValidator() assertEquals(minuteValidator.isValid(30), true) } } internal class MinuteValidatorTest { @Test fun testMinuteValidator() { val minuteValidator = MinuteValidator() assertEquals(minuteValidator.isV..
Unit Test 환경 설정하기 : JUnit 환경 설정 하고 테스트 해보기
환경 설정하기 1. Intellij의 File - New 경로에서 Project... 을 누른다. 2. Gradle 탭으로 들어가 Java와 Kotlin/JVM에 체크 한 후 Next를 누른다 3. 원하는 저장소 이름을 쓴 후 Finish를 누른다. 4. 그러면 다음과 같은 화면을 확인할 수 있다. 5. build.gradle 파일의 dependencies 파일을 다음과 같이 수정한다. *JUnit5도 나왔지만, 처음에는 JUnit4 를 사용한다. 이 글에서 다루는 모든 내용은 JUnit5에서도 사용할 수 있는 내용이다. plugins { id 'org.jetbrains.kotlin.jvm' version '1.7.21' id 'java' } group 'org.example' version '1.0-S..
Unit Testing 이란 무엇인가?
Unit Testing Unit Testing은 Unit 과 Testing이 합쳐진 단어이다. 따라서 Unit Testing에 대해 논하기 위해서는 Unit과 Testing 각각이 무엇을 의미하는지 알아야 한다. Unit Unit 이란 기능들을 저장하는 컨테이너이다. Unit은 특정한 책임을 가지고, 명확히 정의된 역할의 범위를 가진다. 즉, 객체 지향 프로그래밍(OOP) 에서는 객체가 Unit의 후보가 되며, Kotlin과 Java에서는 class가 Unit이 될 수 있다. 하지만 모든 객체가 Unit은 아니다. 이유는 데이터를 저장하기만 하고, 동작(기능)이 없는 객체는 Unit이 아니기 때문이다. 예를 들어 Kotlin의 Data Class나 Java의 POJO의 경우 데이터를 저장하는 역할만 하므..