2018-3-12 TIL java 테스트코드

JUnit Test Code

public class Car {
    private int position;

    public void move() {
        Random rnd = new Random();
        int value = rnd.nextInt(10);
        if (value > 4) {
            this.position++;
        }
    }
}
  • 위의 코드는 테스트를 하기 힘들다. 기능이 너무 많고, random값에 따라 테스트값이 바뀐다.
  • 테스트가 가능한 부분과 가능하지 않은 부분을 나눈다.
  • value를 임의적으로 바꿀 수 있으면 테스트가 가능하다
  • 테스트코드를 작성하게 되면, 클래스랑 메소드가 변경이 된다.
// Car.java
package codesquad;

public class Car {
    private int position;
    private String name;

    public Car(String name) {
        this(name, 0);
    }

    public Car(String name,int position) {
        this.name = name;
        this.position = position;
    }

    public int move(int value) {
        if (value >= 4) {
            this.position++;
        }
        return this.position;
    }

    public int getPosition() {
        return position;
    }

}



// Randomgenerate.java
package codesquad;

import java.util.Random;

public class RandomGenerate {
    public int generator() {
        Random rnd = new Random();
        return rnd.nextInt(10);
    }
}
  • src/java는 프로덕션코드, src/test는 테스트코드를 관리하는거다.
// CarTest.java
package codesquad;

import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class CarTest {
    private Car car;

    @Before
    public void setUp() {
        car = new Car("jimmy");
    }

    @Test
    public void 이동() {
        assertEquals(1, car.move(5));
    }

    @Test
    public void 정지() {
        assertEquals(0, car.move(3));
    }
}

오늘의느낀점

  • 오랜만에 JUnit을 이용한 테스트코드 강의를 들었다. 처음에는 JUnit을 이용을 해서 테스트코드를 작성하는 방법을 몰랐는데, 레이싱카랑 사다리타기 프로젝트를 하면서 테스트코드 짜는것에 대해서 많이 익숙해 졌다. 테스트 코드를 만들것을 염두해서 메소드를 만들다보니까 void를 덜 쓰게되었고, 전에는 어색하고 왜 만들어야되는지도 모르고 불편하기만 했던 테스트코드가 이제는 많이 익숙해지고 편리함을 알거같다. 지금은 로또 프로젝트를 시작을 했다. 로또프로젝트에 대해서 지난 주말동안 고민을 했는데, 설계를 해놓고 갑자기 Lotto의 데이터타입을 가지는 ArrayList lottos가 구현이 안된다. 아무래도 월요일이라서 그런가보다. 늘 월요일에는 많이 피곤하기때문에 코드를 짤때 머리가 잘 안돌아간다. 다행히도 로또번호를 생성하고 당첨번호를 입력하는 메소드들은 다 구현을 했다. ArrayList lottos를 어떻게 구현을 해야될지 고민을 해봐야겠다. 레이싱카와 사다리타기 프로젝트를 하면서 Car객체를 가지는 ArrayList cars를 구현을 했었는데, 갑자기 안되서 당황스럽기는 하다... 잠깐 머리를 쉬면서 고민을 해봐야겠다 :D
Written on March 12, 2018