Notice
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Round Square
- 그래들
- layout
- spinner
- UI
- 리스트뷰
- 유니티
- ListvView
- Android
- camera
- 레이아웃
- 스피너
- GlobalComponent
- Ext
- WebCamTexture
- GPS
- DP
- webcam
- Unity
- Handelr
- bottom
- 안드로이드
- gradle
- 조이스틱
Archives
- Today
- Total
JY-Dev Tech Blog
Mock 객체 본문
[Mock 객체란]
Mock Object는 검사하고자 하는 코드와 맞물려 동작하는 객체들을 대신하여 임의적으로 동작하기 위해 만들어진 객체입니다. 검사하고자 하는 코드는 Mock Object의 메서드를 부를 수 있고 이 때 Mock Object는 미리 정의된 결과 값을 전달합니다. Mock Object는 자신에게 전달된 인자를 검사할 수 있으며, 이를 테스트 코드로 전달할 수도 있습니다. 그래서 이 가짜 객체를 이용하면 상당 부분의 테스트를 사용자의 개입 없이 자동화 할 수 있습니다.
[사전적 의미]
- Mock : 무시하다, 거짓된, 가짜의 의미
- 조각하기 쉬운 재료를 이용해 추후 만들어질 제품의 외양을 흉내 낸 모조품
[Mock 객체가 필요한 경우]
- 테스트 작성을 위한 환경 구축이 어려울 경우
- 환경 구축을 위한 작업 시간이 많이 필요한 경우
- 특정 모듈을 갖고 있지 않아서 테스트 환경 구축이 어려운경우
- 테스트 시간이 오래 걸리는 경우
- 테스트가 특정 경우나 순간에 의존적인 경우
[Mock 프레임워크]
- 동적으로 mock 객체를 만들어 주는 프레임워크이며 사용시 아래의 장점이 있다.
- Mock 객체를 명시적으로 생성하지 않아도 된다.
- 행위기반 테스트도 가능하다.
1. EasyMock
- 가장 오래된 Mock프레임워크이며, 오픈소스로 탐 프리스가 만들었다.
- 홈페이지는 http://easymock.org 이다.
- 일반적으로 Mock 프레임워크는 인터페이스를 통해 객체를 생성하는데 EasyMock Class Extention이라는 기능을 통해 구현 클래스를 통하여 객체를 생성하도록 지원한다.
- 기본적으로 4단계를 통하여 동작하며 각 단계는 생략될 수 있다.
- CreateMock : 인터페이스에 해당하는 Mock 객체를 생성한다.
- Record : Mock 객체 메소드의 예상되는 동작을 녹화한다.
- Replay : 예정된 상태로 재생한다.
- Verify : 예정된 행위가 발생했는지 검증한다.
- 녹화, 재생이라는 개념은 처음 접하는 사람들에게는 어려운 개념이다. 그러나, 가장 오래된 프레임워크라서 과거에 많이 사용되었기 때문에 읽을 수 있을 정도는 배워두는 것이 좋다.
2. jMock
- 스티프 프리만, 냇 프라이스가 만든 프레임 워크로 테스트 표현의 확대와 가독성이 좋다.
- 홈페이지는 http://www.jmock.org 이다.
- 특징은 아래와 같다.
- 연쇄호출(call-chain) : 동일한 객체에 여러 개의 메세지를 보낼 수 있다. void로 선언된 메서드도 플로우를 만들어서 순차 호출 할 수 있다.
- 전용 Macher 사용 : 기본적으로 Hamcrest Macher 라이브러리를 사용한다.
- 기본적으로 아래의 4단계로 진행된다.
- CreateMock : 인터페이스에 해당하는 Mock 객체를 생성한다.
- Expect : Mock 객체의 예상되는 동작을 미리 지정한다.
- Excercise : 테스트 메소드 내에서 Mock 객체를 사용한다.
- Verify : 예상한 행위가 발생했는지 검증한다. 사용자가 작성하지 않고 프레임워크가 자동으로 판단한다.
3. Mockito
- 역사는 오래되지 않았지만 간편한 사용법으로 빠르게 확산되고 있으며 상태 기반 테스트를 지원한다.
- 홈페이지는 https://code.google.com/p/mockito/ 이다.
- 특징은 아래와 같다.
- 사용법이 단순하다.
- call("getName")처럼 이름이 호출하지 않는다.
- 읽기 어려운 anonymous inner클래스를 사용하지 않는다.
- 리펙토링이 쉽다.
- 작성이 어렵지 않아 테스트 자체에 집중할 수 있다.
- 테스트 스텁을 만드는 것과 검증을 분리한다.
- Mock 만드는 방법을 단일화 했다.
- 테스트 스텁을 만들기 쉽다.
- API가 간단하다.
- 실패 시에 발생하는 스택 트레이스가 깔끔하다.
- 아래의 4단계로 진행된다.
- CreateMock : 인터페이스에 해당되는 Mock 객체를 만든다.
- Stub : 테스트에 필요한 Mock 객체의 동작을 지정한다.
- Excercise : 테스트 메소드 내에서 Mock 객체를 사용한다.
- Verify : 메서드가 예상되로 호출되었는지 검증한다.
[Mock 사용시 유의사항]
- Mock 프레임워크가 정말 필요한지 확인한다.
- Mock을 사용하는 경우 테스트 케이스 유지에 복잡성이 더해지기 때문에 Mock이 없는 의존성 적은 구조로 프로그래밍 한다.
- 어떤 Mock 프레임워크를 사용하느냐는 핵심 문제가 아니다.
- 어떤 프레임워크를 사용하느냐에 따라 테스트 케이스 작성에 커다란 영향이 미치지 않는다. 단지 익숙해지기 까지 시간이 필요할 뿐이다.
- Mock 객체는 Mock 일 뿐이다.
- 실제 객체로 작동을 해보았을 때 잘 작동하지 않을 수도 있다. Mock 객체는 흉내를 내는 객체이기 때문이다.
'안드로이드 > 테스트코드' 카테고리의 다른 글
Android(안드로이드) - What is Appium? (0) | 2020.10.29 |
---|---|
Android(안드로이드) - Espresso (0) | 2020.10.28 |
Android(안드로이드) - Junit Annotaion (어노테이션) (0) | 2020.10.28 |
ANDROID TDD (0) | 2020.10.27 |
Comments