정상에서 IT를 외치다

[Android, Test ] UnitTest, UiTest 기본 예제 본문

안드로이드

[Android, Test ] UnitTest, UiTest 기본 예제

Black-Jin 2018. 10. 5. 13:55
반응형


안녕하세요. 블랙진입니다.


이번시간에는 Unit Test 와 Ui Test 하는 법에 대해 차근차근 포스팅 해보겠습니다.




TEST PYRAMID



테스트를 하는 이유?


자신의 코드에 대한 안정성 검사와 자신감을 얻기 위해 하는게 아닐까? :) 개인적으로는 무엇보다 코드 리팩토링시 기존에 돌아가던 로직을 검사하는데 있어 꼭 필요한 절차인것 같습니다.



안드로이드 테스트 종류


1. Unit 테스트

- 일반적으로 코드의 유닛 단위(메소드, 클래스, 컴포넌트)의 기능을 실행하는 방식

- 관련 툴 : JUnit, Mockito, PowerMock 


2. Ui 테스트

- 사용자 인터랙션(버튼 클릭, 텍스트 입력 등)을 평가

- 관련 툴 : Espresso, UIAutomator, Robotium, Appium, Calabash, Robolectric 



기본 사용 방법


안드로이드 스튜디오 3.1.3 버전을 기준으로 설명하겠습니다.

새 프로젝트를 만들면 기본적으로 다음과 같이 테스트에 필요한 파일들이 자동으로 Setting 되어 있습니다


1. app 단계의 build.gradle

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'

// test implementation
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

test implmentation 주석 아래 3가지 implementation이 테스트를 위해 필요한 라이브러리 입니다. 처음 파일을 만들었을 때 자동으로 설정 되어 일을 수도 있고 없다면 추가해 주세요!



2. Project 파일 단계에서 확인



왼쪽 상단의 Project 단계에서 앱의 파일들을 확인해 보면 src/androidTest 파일과 src/test 파일이 있는것을 확인 할 수 있습니다.


상단 androidTest 파일이 Ui 테스트를 진행하는 파일들이 있는 곳이고 그 아래 test 파일이 Unit 테스트를 진행하는 파일들이 있는 곳입니다.

그럼 Unit 테스트 중 Junit 을 사용한 방법에 대해서 좀 더 자세히 살펴보겠습니다.



3. ExampleUnitTest

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

ExampleUnitTest 파일의 모습입니다. 예제파일로 위와 같이 기본 설정 되어있습니다.

assertEauqls 는  아래 모습과 같이 기대값과 결과값의 변수를 파라미터로 받습니다.

static public void assertEquals(long expected, long actual) {
assertEquals(null, expected, actual);
}

그럼 위 ExampleUnitTest 파일의 assertEquals 는 기대값이 4 이고 결과값 2 + 2 인것을 의미합니다. 연산을 보면 참인것을 바로 알 수 있죠?

그럼 이 테스트 파일을 실행 해보면 ok 결과가 나오게 됩니다.



4. 테스트 파일 실행하기



실행하는 법도 간단합니다. ExampleUnitTest 파일을 우클릭 한 후 Run 'ExampleUnitTest' 을 실행해주시면 됩니다.



5. 결과



결과는 참이기 때문에 위와 같이 초록색 바가 나타납니다. 만약 참이 아닌경우라면??


class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(5, 2 + 2)
}
}

ExampleUnitTest 의 기대값을 5로 해보고 실행해 보겠습니다.



위와같이 Expected: 5 이지만 Actual : 4 이므로 거짓의 결과가 나옵니다.

이런식으로 UnitTest 를 진행할 수가 있습니다. 이번에는 직접 클래스를 만들어서 유닛 테스트를 진행해 볼까요?



6. Calculator.class


Calculator.class 파일을 main/java/packageName 에 만들어 줍니다.


public class Calculator {

public int add(int a, int b) {
return a + b;
}

public int subtract(int a, int b) {
return a - b;
}
}

더하기와 빼기 기능이 있는 객체 입니다. 이제 이 기능이 잘 돌아가는지 체크를 해볼까요?



7. CalculatorTest 


CalculatorTest 파일을 Unit 테스트 했던 파일 아래에 생성해 줍니다.



import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class CalculatorTest {
private Calculator calculator;

@Before
public void setUp() {
calculator = new Calculator();
}

@Test
public void addTest() {
int result = calculator.add(15,10);
assertEquals(25, result);
}

@Test
public void subtractTest() {
int result = calculator.subtract(15,10);
assertEquals(5, result);
}
}

여기서 테스트에 관한 어노테이션 2개를 설명하겠습니다.


@Before : @Test 를 시작하기 전 사전에 진행해야 할 사전 정의에 해당됩니다. @Test가 시작되기 전 항상 호출하게 됩니다.

@Test : @Before가 완료되면 실제 코드 테스트를 진행하게 됩니다.


JUnitAnnotaions



8. 실행


4번과 마찬가지로 CalculatorTest 파일을 우클릭 한 후 Run 'CalculatorTest' 를 해주면 됩니다.



9. 링크


Junit 을 사용한 좀 더 복잡한 테스트 예제 입니다. 학습을 더 원하시는 분은 따라해 보는걸 추천합니다.~!



<Test Code 포스터>

UnitTest using Mockito

UiTest using Espresso


<참고 자료>

Realm - 안드로이드 테스트 개요

androidTest - Taehwan

Google Developer - Android Test

반응형
Comments