효율적인 안드로이드 개발을 위해선 테스트에 대한 것을 빼놓을 수 없다. 협업 과정에서 개발한 모듈을 전체적인 테스트를 하기전 단위 테스트를 거쳐 다양한 문제점들을 발견하고 수정하여야 한다. 단위 테스트는 또한 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() 외에 다양한 단정문을 확인하고 싶다면
'Android' 카테고리의 다른 글
안드로이드 개념) CPU Profiler (0) | 2021.01.30 |
---|---|
안드로이드 개념) Debug, Debuging, Debugger (0) | 2021.01.30 |
안드로이드 개념) Complie, Build와 Gradle (0) | 2021.01.30 |
리소스와 코드의 연결 (0) | 2021.01.30 |
Android Test : Ui Test - Espresso (0) | 2021.01.30 |