2015년 4월 19일 일요일

android에서 TDD(Test Driven Development) 사용하기


안드로이드에 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-launching

5. 위의 link중 가운데 http://infinitest.github.io/ 이것을 설치해보라는 말이 있어서...
시도해 보았습니다. 이것도 안됩니다.
결국 찾은것은 Java Devlopment Tools 입니다. 아래 코멘트도 있지만 정확한 명칭은 Eclipse Java Development Tools입니다.

What worked for me after trying everything:
  1. Go to help
  2. Install New Software
  3. Work with: Juno
  4. Programming languages (expand it)
  5. Install Java Development Tools
  6. Restart
It works :)
shareimprove this answer
1 
Thank you very much! This worked for me, too! –  Sam Oct 24 '14 at 10:37
2 
The name of the package I had to install was Eclipse Java Development Tools rather than just Java Development Tools. –  Sam Oct 24 '14 at 10:49
   
@Sam What will be the update url? I am already having Juno with ADT 23.0.2. –  devo Nov 2 '14 at 4:18
   
   
@devo The update site already comes with Eclipse itself. Just open up the drop-down menu and you'll find it.–  Xiang Ji Dec 3 '14 at 14:51

6. test case 와 실제 코드의 적절한 균형이 중요합니다.
이것은 기회가 있으면 다음에 설명하도록 하겠습니다.






댓글 없음:

댓글 쓰기