[Android] TDD 차근 차근 시작하기 1 (TDD 개념 잡기)

2 분 소요

요새 개발을 하면서 테스트 코드 작성의 중요성에 대해 깨닫게 되면서 테스트하는 법에 대해 공부를 해야겠다는 생각을 했다.

그래서 우선 여러 TDD에 대한 글들을 읽어 봤지만 어디서부터 어떻게 시작해야될지 감이 안잡히더라구요.

그래서 언제나 그렇듯 Google Developer Docs를 확인해보았다.

TDD 에 대해 잘 정리된 Fundamentals of Testing이라는 문서를 기반으로 TDD 에 대한 큰 그림, 흐름을 정리해볼 생각이다.

RED GREEN REFACTOR

TDD Cycle

안드로이드 (또는 Front-End 와 Back-End를 같이 개발하는 경우)에 TDD를 적용하는 경우 위의 Flow로 개발을 하게 된다

위 Flow에 설명을 좀 더 해보면 아래와 같다

  1. 먼저 구현할 기능을 UI 테스트어떻게 할 것인지 생각한다.
  2. UI 테스트 코드를 작성해서 에러를 발생하게 한다 ( Failing UI Test )
  3. 해당하는 UI 코드에 구현해야할 로직 (Unit Test)어떻게 테스트할지 생각한다.
  4. Unit Test 코드를 작성하고 에러를 발생하게 한다 ( Failing Unit Test )
  5. 기능을 구현후 Unit Test 를 통과한다 ( Passing Unit Test )
  6. 구현한 코드를 리펙토링한다 ( Refactor )
  7. UI 구현후 UI Test를 통과한다 ( Passing UI Test )
  8. 리펙토링한다 ( Refactor )
  9. 모든 요구 조건을 만족할때까지 위 Flow를 반복한다.

음.. 지금까지 내가 보아왔던 Red - Green - Refactor 보다 조금 더 복잡했다. 보통은 UI, Unit Test를 나눠서 따로 하는데 모바일의 경우 보통 개발자가 UI와 Logic을 같이 개발하기 때문에 Test도 같이 하게 된다.

1. Small Test

Test Pyramid

Small Test“Unit Test” 를 의미한다.

Unit Test 는 가장 작은 단위의 테스트이며, 실제 시스템과 ‘독립적으로’ 제대로 작동하는지 확인하는 테스트이다.


선풍기

예를 들면 내가 선풍기를 만든다고 가정해보자

선풍기를 우선 다 만들고 테스트를 한다고 생각해보자

당연히 처음 만들다 보면 실수가 있기 마련 선풍기가 작동이 안된다.

어디가 문제인지 과연 쉽게 찾을 수 있을까???

그럼 이번엔 부품 하나 하나 잘 작동하는지 테스트를 해보자

이렇게 하면 더 문제를 쉽고 미리 찾아 낼 수 있지 않을까??

[ Unit Testing Tool ]

Unit Test 를 할때 사용하는 툴은 다음과 같다.

자세한 내용들은 다음글에서 자세히 다뤄보겠다.

  1. Robolectric (공식 홈페이지)
  2. Mockito (공식 홈페이지) / (한국어 설명)
  3. Instrumented unit tests (Android Developer)

2. Medium Test

Medium Test“Integration Test” 를 의미한다.

Integration TestSmall Test와 Large Test 간에 제대로 작동하는 지 확인하는 테스트이다

why_we_have_to_test_integration_test

[우리가 Integration Test를 해야하는 이유]

각각 Unit Test들이 잘 동작한다고 하더라도 실제로 전체를 실행시키면 내가 의도한 것과는 다르게 작동할 수 도 있다

3. Large Test

Large TestIntegration 과 UI Test 를 의미한다

마무리 테스트 단계라고 보면 될것 같다. 실제로 우리가 예상한대로 구현이 되었는지를 테스트하는 것이다.

** 각각의 테스트들을 어느 정도의 비율로 진행하면 좋은지에 대해 설명이 되어 있지만 이것은 상황에 따라 유동적으로 가야되는 부분인 것 같다. 하지만 위 3가지 테스트들을 모두 진행해야 된다고 생각한다. **

[ Large Testing Tool ]

  1. Espresso (Android Developer)
  2. JUnit4 Rules (Android Developer)
  3. Android Test Orchestrator (Android Developer)

마무리

이 글을 읽으면서 나처럼 TDD를 시작해보려는 개발자들에게 작은 도움이 되었으면 좋겠다.

다음에는 Unit Test에 사용하는 Robolectric, Mockito, Junit4 등의 툴에 대해 공부해보고 글을 써보려고 한다.

글을 마무리 하기 전에 Google IO 에서 TDD 관련 세미나를 했던 영상을 공유한다.