일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 소프시스 밤부 좌식 엑슬 테이블
- 리얼하다
- 한단어의힘
- 캐치마인드
- 함수형 프로그래밍
- 목적중심리더십
- 한달브런치북만들기
- 좌식테이블
- 안드로이드
- 한달어스
- 지지않는다는말
- 프래그먼트
- 북한살둘레길
- T자형인재
- 브런치작가되기
- 어떻게 나답게 살 것인가
- 목적 중심 리더십
- 소프시스
- 재택근무
- 한달독서
- 끝말잇기
- 1일1커밋
- 슬기로운 온라인 게임
- 테트리스
- 아비투스
- 베드트레이
- 베드테이블
- 자취필수템
- 면접
- 커스텀린트
- Today
- Total
정상에서 IT를 외치다
[Android, Test ] UnitTest, UiTest 기본 예제 본문
안녕하세요. 블랙진입니다.
이번시간에는 Unit Test 와 Ui Test 하는 법에 대해 차근차근 포스팅 해보겠습니다.
테스트를 하는 이유?
자신의 코드에 대한 안정성 검사와 자신감을 얻기 위해 하는게 아닐까? :) 개인적으로는 무엇보다 코드 리팩토링시 기존에 돌아가던 로직을 검사하는데 있어 꼭 필요한 절차인것 같습니다.
안드로이드 테스트 종류
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가 완료되면 실제 코드 테스트를 진행하게 됩니다.
8. 실행
4번과 마찬가지로 CalculatorTest 파일을 우클릭 한 후 Run 'CalculatorTest' 를 해주면 됩니다.
9. 링크
Junit 을 사용한 좀 더 복잡한 테스트 예제 입니다. 학습을 더 원하시는 분은 따라해 보는걸 추천합니다.~!
<Test Code 포스터>
<참고 자료>
'안드로이드' 카테고리의 다른 글
[Android, Espresso] Ui Test using Espresso (0) | 2018.10.08 |
---|---|
[Android, Mockito] Unit Test using Mockito (2) | 2018.10.05 |
[Android, Dagger2] Dagger2 사용 예제 - 2. SharedPref (0) | 2018.10.04 |
[Android, Dagger2] Dagger2 사용 예제 - 1 (0) | 2018.10.04 |
[Android, Dagger2] DI 기본 개념과 Dagger2 사용 예제 - 놈!놈!놈! (6) | 2018.10.01 |