Unit Testing에서 Test Double이 필요한 이유는 무엇일까?
·
Unit Testing
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에서 사..
Kotlin에서 사용할 수 있는 JUnit assert 종류 알아보기 : assertEquals, assertTrue, assertThrows, assertNotNull
·
Unit Testing
이 글을 쓰게 된 이유 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..
IntelliJ, Android Studio에서 Test Coverage 확인과 Test Coverage의 한계점
·
Unit Testing
Test Coverage 란 Test Coverage란 작성한 테스트가 작성한 코드의 얼마만큼을 테스트 하고 있는지에 대한 지표이다. Test Coverage 확인하기 Test Coverage를 확인하기 위해서는 Test 클래스의 실행 버튼에서 3번째 버튼 'Run [클래스명] with Coverage' 를 누르면 된다 . 이를 실행하면 MinuteValidator에 대한 테스트 커버리지가 다음과 같이 나오게 된다. 커버리지는 Class 단위, 메서드 단위, 라인 단위로 모두 확인할 수 있다. 또한 MinuteValidator 클래스 내부에 들어가 보면 Line 에 초록색 네모박스 표시가 되어서 어떤 Line이 테스트 완료되었는지를 확인할 수 있다. Test Coverage의 한계점 Test Covera..
IntelliJ, Android Studio에서 Test 결과를 시각적으로 확인하는 방법 : Gradle 사용
·
Unit Testing
IntelliJ, Android Studio에서 테스트 결과 확인하기 IntelliJ와 Android Studio는 비슷한 테스트 리포트 탭을 가진다. 이 탭은 아래와 같은 화면으로 이루어져 있다. 이 탭에는 여러 버튼들이 있는데 여기서 원하는 테스트를 클릭한 후 Open Gradle test report를 클릭하면 테스트 결과 리포트를 확인할 수 있다. 저 버튼을 클릭하면 Gradle에서 생성한 테스트 리포트가 아래와 같이 나오게 된다. 테스트 결과 파일 경로 위 TestSummary는 보통 Chrome이 열리게 될텐데, 주소창을 보면 다음과 같은 경로에서 파일을 여는 것을 볼 수 있다. 즉, 위 Test Summary는 아래 경로에 생기는 파일을 여는 것임을 확인할 수 있다. [앱 경로]/[앱 명칭]..
Command Line에서 Test 실행하기 : Gradle Task 활용하기
·
Unit Testing
Command Line에서 테스트 실행하기 Command Line에서 테스트를 실행하기 위해서는 Gradle에 미리 정의된 테스크를 사용하면 된다. Task의 명칭은 test 이다. 모든 테스트 수행하기 앱 내부에 작성된 모든 테스트를 수행하기 위해서는 :test 테스크를 사용하면 된다. gradlew :test 특정 클래스의 테스트들 전부 수행하기 특정 클래스의 테스트를 모두 수행하기 위해서는 :test의 --tests 파라미터로 "[패키지명].[클래스명]"을 넘기면 된다. ./gradlew :test --tests "[패키지명].[클래스명]" 아래의 Test중 lecture2/MinuteValidatorTest 클래스 내부의 테스트들을 수행한다고 해보자. 그럴 경우 아래 명령어를 사용하면 된다. 명령..