본문 바로가기

Android

Android Test : Unit Test - Junit

728x90

효율적인 안드로이드 개발을 위해선 테스트에 대한 것을 빼놓을 수 없다. 협업 과정에서 개발한 모듈을 전체적인 테스트를 하기전 단위 테스트를 거쳐 다양한 문제점들을 발견하고 수정하여야 한다. 단위 테스트는 또한 Local Unit Test(JVM 위에서 Test가 수행), Instrumented Unit Test(Android System에서 Test가 수행) 두 가지로 나뉘어 진다.

안드로이드의 테스트

☞ Unit Test

코드의 유닛(Method, Class, Component) 단위를 테스트

☞ Ui Test

사용자의 Ui를 테스트

단위 테스트를 하기위해선 어떤 프레임워크를 사용할 지 정해야한다.

JUnit, Mockito 등을 선택했다면 build.gradle 파일에 해당 라이브러리가 추가되어 있는지 확인하고 없다면 추가한 후 테스트를 시작하면 된다.

프로젝트를 생성한 초기에 Unit, Ui 테스트 디렉토리 내에 ExampleUnitTest, ExampleInstrumentedTest 파일이 있는 것을 확인할 수 있다.

Junit 특징

☞ 단정(assert) 메서드로 테스트 케이스의 수행 결과를 판별한다.

☞ JUnit4 부터는 테스트를 지원하는 어노테이션을 제공한다.

☞ @Test 메서드가 호출될 때 마다 새로운 인스턴스를 생성해 독립적인 테스트가 이루어지도록 한다.

 

import org.junit.Test
import org.junit.Assert.*

/**
 * 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)
    }
}

실행결과:

Process finished with exit code 0
static public void assertEquals(long expected, long actual) {
    assertEquals(null, expected, actual);
}

 

JUnit Annotations

@BeforeClass, @AfterClass : 테스트 전, 후로 테스트 클래스에서 딱 한번씩만 수행되도록 지정

@Before : @Test 메서드가 실행되기 전에 실행된다. @Test 메서드에서 공통적으로 사용하는 코드에 @Bofore 어노테이션을 선언하여 사용하면 된다.

@Test : 해당 어노테이션이 선언된 메서드는 테스트를 수행하는 메서드가 되며, 테스트가 서로 독립적으로 실행되는 것을 원칙으로 @Test 어노테이션 마다 객체를 생성한다.

@After : @Test 메서드가 실행된 후 실행된다. @Before 메소드에서 외부 리소스를 할당하는 경우 테스트를 마친 후 외부 리소스를 해제해야 하는데 이런 경우에 사용하면 된다.

@RunWith : JUnit 프레임워크의 테스트 실행방법을 확장하려면 해당 어노테이션을 사용하면 된다. AndroidJUnit4::class.java 라는 클래스를 지정하면 JUnit이 테스트를 진행할 때 기기 또는 에뮬레이터에서 실행이 가능하다.

위처럼 assertEquals()는 expected라는 기대값과 actual이라는 결과값을 받아 해당 기대값, 결과값이 같은지를 확인해준다. assertEquals() 외에 다양한 단정문을 확인하고 싶다면

 

 

Assert  |  Android 개발자  |  Android Developers

 

developer.android.com