안드로이드에 TDD를 사용하기위해서는 기본적으로 eclipse와 android sdk가 존재한다는 기준으로 설명하겠습니다.
1. 이미 존재하는 project에 JUNIT을 추가합니다.
property 설정에서 Libraries>Add Library...>JUnit>Junit4>Finish>OK
추가 방법은 아래 참고하여 library를 설정합니다.
http://blog.naver.com/kcwwck77/220268539987
2. 테스트만을 위한 새로운 클래스를 만듭니다.
test용 method를 만듭니다.
아래는 예제입니다.
단순하게 설명하자면 @Test를 붙이고 method를 만들고
assertEquals라는 method는 사용하면 두개의 인자의 값이 다르면 false가되며 빨간색의 나타나게됩니다. test case는 개발자가 일일이 넣어서 만듭니다.
import static org.junit.Assert.*; import java.util.ArrayList; import org.junit.Test; public class UnitTest { @Test public void test() { Core core = new Core(null); core.TEST = true; core.setBcheckBoxMonFri(true); core.setBcheckBoxSat(true); core.setBcheckBoxSun(true); core.setBcheckBoxPollingTime7PMto11PM(true); core.setBcheckBoxWifiOnly(true); // 일요일, 7시, wifi true, mobile true assertEquals(core.SET_ALARM_NEXT_DAY, core.checkNextState(1, 7, true, true)); // 일요일, 8시, wifi true, mobile true assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(1, 8, true, true)); // 일요일, 12시, wifi true, mobile true assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(1, 12, true, true)); // 일요일, 19시, wifi true, mobile true assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(1, 19, true, true)); // 일요일, 22시, wifi true, mobile true assertEquals(core.SET_ALARM_NEXT_DAY, core.checkNextState(1, 22, true, true)); // 일요일, 23시, wifi true, mobile true assertEquals(core.SET_ALARM_NEXT_DAY, core.checkNextState(1, 23, true, true)); // 8시, wifi true, mobile true assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(2, 8, true, true)); assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(3, 8, true, true)); assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(4, 8, true, true)); assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(5, 8, true, true)); assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(6, 8, true, true)); assertEquals(core.SET_ALARM_PROCESS|core.SET_ALARM_NEXT_PERIOD, core.checkNextState(7, 8, true, true));
3. 실행시에는 테스트용 java파일에서 마우스 오른쪽 버튼>run as>junit test 을 실행하면 됩니다.
4. 3번에서 에러가 발생한다면 아래와 같이 에러가 발생하였다.
An internal error occurred during: "Launching UnitTest (1)".
java.lang.NullPointerException
다시 설치하라는등.... Java Development Tools 를 설치해보라는등.... 여러가지 설이 있었으나, 다시설치하기는 무리가 있어서 다른 방법을 시도하였다.
http://stackoverflow.com/questions/1250505/junit4-eclipse-an-internal-error-occured-during-launching5. 위의 link중 가운데 http://infinitest.github.io/ 이것을 설치해보라는 말이 있어서...
시도해 보았습니다. 이것도 안됩니다.
결국 찾은것은 Java Devlopment Tools 입니다. 아래 코멘트도 있지만 정확한 명칭은 Eclipse Java Development Tools입니다.
19
|
What worked for me after trying everything:
It works :)
| ||||||||||||||||||||
|
6. test case 와 실제 코드의 적절한 균형이 중요합니다.
이것은 기회가 있으면 다음에 설명하도록 하겠습니다.