앱이나 기능을 만들고나면 해당기능을 검사해야합니다. 그방법으로 직접 실행해서 검사를 하거나 로그를 따거나 아니면 디버깅을 하는등의 방법을 들수있는데 오늘은 단위테스에 대하여 말해볼까합니다.
위키피디아에서는
유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하는 절차를 말한다. 이를 통해서 언제라도 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악하고 바로 잡을 수 있도록 해준다. 이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를 위해 가짜 객체(Mock object)를 생성하는 것도 좋은 방법이다. 유닛 테스트는 (일반적인 테스트와 달리) 개발자(developer) 뿐만 아니라 보다 더 심도있는 테스트를 위해 테스터(tester)에 의해 수행되기도 한다.
안드로이드에서도 단위테스트를 할수있는 공간이 있습니다.


안드로이드에서 프로젝트를 만들게되면 위그림처럼 androidTest와 test 디렉토리가 생성됩니다. 각디렉토리모두 test를 할수있는 공간이지만 차이가 있습니다. androidTest의 경우 실제 디바이스나 에뮬레이터에서 실행되어 앱의 UI 테스트, 시스템 상호 작용 테스트 등을 할수있습니다. test의 경우에는 JVM(Java Virtual Machine)에서 실행되므로 안드로이드 프레임워크에 의존하지 않고 앱의 비즈니스 로직이나 유틸리티 기능 등을 테스트할수 있습니다.
안드로이드에서 단위 테스트를 하기 위해서는 JUnit과 Mockito를 알아야합니다. JUnit은 단위 테스트 프레임워크로서 자바 애플리케이션의 단위 테스트를 작성하는 데 사용됩니다. Mockito는 자바에서 모의 객체를 만들고 조작하는 데 사용되는 라이브러리입니다.
Juit 같은경우 여러 어노테이션을 지원합니다. 해당 어노테이션은 테스트를 용이하게 만듭니다.
해당 메서드가 테스트 메서드임을 나타내는 애노테이션입니다.
각 @Test 메서드가 실행되기 전에 실행해야 하는 메서드를 지정합니다.
각 @Test 메서드가 실행된 후에 실행해야 하는 메서드를 지정합니다.
해당 테스트 클래스의 모든 테스트 메서드가 실행되기 전에 한 번 실행되어야 하는 메서드를 지정합니다.
해당 테스트 클래스의 모든 테스트 메서드가 실행된 후에 한 번 실행되어야 하는 메서드를 지정합니다.
해당 테스트를 무시하고 실행하지 않도록 지정합니
이런식은 어노테이션들을 추가하여 test에 용이하게 환경을 구축할수있습니다.
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.example.myapplication", appContext.packageName)
}
}
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}