junit
[Unit Testing] 어떤 클래스에 테스트가 필요할까? data class 도 테스트가 필요한가?
테스트는 어떤 클래스에 필요할까? 객체 지향 언어에서 클래스는 데이터만을 저장하는 클래스, 동작을 포함하는 클래스 두가지 종류로 나뉜다. 예를 들어 Java의 경우는 일반적인 클래스와 POJO 클래스가 있다. Kotlin의 경우는 데이터만을 저장하는 클래스와 동작이 포함된 클래스가 있다. 프로그래밍에서는 데이터만을 저장하는 클래스를 '데이터 구조' 라 부르고 동작을 포함하는 클래스를 '객체'라 부른다. Unit Testing에서의 Unit은 특정한 책임을 가지고, 명확히 정의된 역할을 가진 것이다. 이는 바로 '객체'를 뜻한다. 즉, Unit Testing의 대상은 객체이지 데이터 구조가 아니다. 따라서 테스트가 필요한 클래스는 동작을 포함하는 클래스인 객체이다. Kotlin의 data class는 테스..
[JUnit] Unit Testing을 깔끔하게 작성하는 방법 : 테스트 이름 작성 방법, 코드 순서 작성 방법
Unit Testing 깔끔하게 작성하기 Unit Testing을 깔끔하게 작성하기 위해서는 Unit Test의 이름, 테스트 내부의 작성 순서가 중요하다. 이름 작성 방법 가독성을 좋게 만들려면 [메서드명][결과][환경 설명] 순서로 작성한다. 예를 들어 LoginRepository에서 Login이 Success했을 때, LoginUseCase의 login이 Success 해야 한다면 [login][Success][WhenLoginRepositoryLoginSuccess]와 같이 같이 테스트 이름이 작성될 수 있다. @Test fun loginSuccessWhenLoginRepositoryLoginSuccess() { val repositorySuccessResult = LoginRepositoryRe..
[Unit Testing] Mockito 사용해 Test Double 만들기
이번 시간에는 Mockito를 사용해 Test Double을 만드는 방법을 살펴볼 것이다. Mockito를 사용하기 위한 환경 설정부터 시작하자. 환경설정 이전 글까지는 junit:junit:4.13.2 만으로 테스트가 가능했지만, 이번 글에서는 Mockito를 사용하므로 하나의 Dependency를 추가해야 한다. 바로 'org.mockito:mockito-inline:3.3.3' 이다. Kotlin을 사용한다면 mockito-inline을 추가해 주는 것이 좋다. dependencies { ... testImplementation 'junit:junit:4.13.2' testImplementation 'org.mockito.kotlin:mockito-kotlin:4.1.0' } 추가했으면 Load G..
Kotlin에서 사용할 수 있는 JUnit assert 종류 알아보기 : assertEquals, assertTrue, assertThrows, assertNotNull
이 글을 쓰게 된 이유 Java의 JUnit을 기반으로 문서들을 보다보니, Java의 assert와 Kotlin의 assert가 다른 것들을 알게 되었다. 예를 들어 Java에서 asserThat을 사용해 동일성을 테스트 하려면 다음과 같이 작성해야 한다. assertThat("a", is("a")) 하지만 이를 Kotlin의 assert로 바꾸면 다음과 같이 된다. assertEquals("a","a") 이러한 차이가 여러개 있다 보니 Unit Testing을 알아보는데 방해가 되어서 이번 글에서 정리하고 넘어가고자 한다. Kotlin의 assert Kotlin에는 다양한 assert가 있다. 그 중 자주 사용되는 것은 assertEquals, assertNotEquals, Assert.assertTr..
@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..