초보 개발자 코드 트레이닝, Part 4. TDD 수련 - 야구게임 2편

이전내용

GameNumber에 대한 값 검사 하는 부분을 추가했습니다.

테스트 내용은 "(1,2,10)으로 생성하면 에러를 보내야한다.. (1,2,1)을 생성성해도 마찬가지 에러를 보내야한다." 입니다.


테스트코드

    @Test
    public void checkNumberRange() {
        boolean isCatch = false;
        try {
            new GameNumber(1,2,10);
        } catch (RuntimeException e) {
            e.printStackTrace();
            isCatch = true;
        }
        assertTrue(isCatch);
       
    }
   
    @Test
    public void checkNumberDuplicate() {
        boolean isCatch = false;
        try {
            new GameNumber(1,2,1);
        } catch (RuntimeException e) {
            e.printStackTrace();
            isCatch = true;
        }
        assertTrue(isCatch);
    }

테스트코드가 좀 지져분합니다. 그냥 Exception을 주려고 했는데, 그렇게 되면 기존 GameNumber를 생성하는 부분에서는모두 에러 확인 처리를 해줘야하니 불편하다고 생각해 RuntimeException으로 작성했습니다. 아직 두개의 쓰임새가 머리에 쏙 와 닿지가 않네요. 좀 진행하다보면 차이점이 도출될 것 같습니다.(기존에도 RuntimeError를 많이 썼습니다. 그렇지만 이러면 강제성이 없어 script언어같다는 느낌이 들어요)

GameNumber

    public GameNumber(int number1, int number2, int number3) {
        numbers = new int[numberCount];
        numbers[0] = number1;
        numbers[1] = number2;
        numbers[2] = number3;
        for(int eachNumber : numbers) {
            if(!(eachNumber > 0 && eachNumber < 10))
                throw new OutOfRangeGameNumberException();
        }
       
        int idx = 0;
        for(int eachNumber : numbers) {
            int otherIdx = 0;
            for(int eachOtherNumber : numbers) {
                if(idx == otherIdx)
                    continue;
               
                if(eachNumber == eachOtherNumber) {
                    throw new EachEqualNumberException();
                }
                otherIdx++;
            }
            idx++;
        }
    }

기존 코드에 추가된 부분은 과감히 파란색! 반복문안에 자꾸 반복문이 들어가 거스르긴 한데, 뭐 유한한 값이니 그렇다고 죄다 풀어서 비교하는 코드도 너무 Copy&Paste이잖아요.

테스트목록 정리
  1. 게임숫자는 3자리이다.
  2. 숫자의 범위는 1부터 9까지이다.
  3. 각자리의 숫자는 중복될수 없다.  -> 하나 추가했습니다.
  4. 숫자를 비교할수 있어야한다. (같다와 다르다를 알수 있어야한다.)
        예)1,2,3 == 1,2,3, 1,2,4 != 1,3,4
  5. 숫자들의 비교결과를 상세히 알수 있어야한다..(strike, ball, hit, out)
  6. 특정 시도 횟수 내에 맞출수도 있고, 아웃이 될수도 있다. 다시 게임을 하면 이전에 생성한 숫자는 쓸수 없다.
        숫자를 다시 생성할때 이전 기록과 중복여부를 판단하고 같다면 다시 생성한다.
  7. 사용자가 숫자를 등록하면 컴퓨터와 비교하고 결과를 리턴, 매번 시도 횟수도 출력해야한다.
        예) 현재 1strike 기회 3번시도중  1사용했습니다.
  8. BaseballGame이라는 클래스를 써야한다(main이 여기서 시작)
  9. 게임을 처음실행하면 사용자에게 입력을 받을수 있다.
        콘솔에서 게임숫자를 입력받아야 한다. 1,2,3 하면 1,2,3을 파싱해서 담아야한다.
  10. 매번 게임은 현재 게임횟수를 출력해야한다.(시도횟수와는 다르다)
        현재 첫번째 게임을 하고 있습니다.
        현재 두번째 게임을 하고 있습니다.
  11. 게임은 hit이거나 out이 되야 한게임이 끝이 난다.
        hit나 out이 나오면 게임을 다시 시작한다.
  12. 게임이 종료되면 다시 게임을 시작한다.
  13. 게임중 현재 상태를 요청할수 있다.(현재 상태를 출력해주는 루틴만 있으면 되겠다)
  14. 게임이 기록이 없다면 기록을 둘려줄수없다.

by 소내기 | 2008/08/14 10:21 | TDD | 트랙백 | 덧글(0)

트랙백 주소 : http://sonegy.egloos.com/tb/4549837
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶