저번 포스팅에서는 racing 콘솔 프로그램 구현 과정을 설명드렸습니다.
그래서 이번 포스팅에서는 테스트 코드에 관해 다룰려고 합니다!
그 중에서도 인터페이스 테스트에 관한 부분입니다.
전체적인 테스트 코드를 다루지 않는 이유는 테스트 코드 하나 하나 나열하자니 너무 많기도 하고, 테스트 코드 자체가 설명이기에 따로 설명할 것이 없어 코드 복붙밖에 안된다는 생각이 들었습니다...
그래서 앞으로는 테스트 코드 중에서도 조금 특별한 부분을 중점적으로 다루고자 합니다.
오늘은 제가 인터페이스 테스트 어떻게 했는지 설명드리겠습니다!
* CreateRandomNumber
public interface CreateRandomNumber {
int generateRandomNumber();
}
* CarRandomNumber
public class CarRandomNumber implements CreateRandomNumber {
private static final Random randomNumberGenerator = new Random();
private static final int LAST_NUMBER = 10;
@Override
public int generateRandomNumber() {
return randomNumberGenerator.nextInt(LAST_NUMBER);
}
}
racing 콘솔에서 실제로 쓰인 CarRandomNumber 클래스 입니다.
CreateRandomNumber 를 상속받아 0~10 사이의 수를 반환하도록 구현되어있습니다.
그렇다면 이런 랜덤 정수 반환 메서드를 테스트에서 가져다 쓸 수 있을까요?
당연히 없습니다!
그렇다면 어떤 방식으로 작성해야 할까요?
저는 요런 식으로 FakeRandomNumber를 반환하는 패키지를 하나 파주고, 그 안에 클래스를 구현하였습니다.
* FakeRandomNumber
public class FakeRandomNumber implements CreateRandomNumber {
@Override
public int generateRandomNumber() {
return 4;
}
}
항상 4만 나오도록 구현하였습니다.
그렇다면 테스트 코드를 구현할 수 있겠죠??
물론 인터페이스가 숫자를 항상 반환하는지도 테스트 해주어야 합니다.
*CarTest
이런 식으로 CreateRandomNumber createRandomNumber = new FakeRandomNumber(); 가짜 구현체를 생성하여서 moveCar 매개변수에 넣어줍니다.
항상 4를 반환하는 메서드이므로, moveCount 가 하나 늘어납니다.
* 결론
인터페이스는 가짜 구현체를 만들어서 테스트 하면 되겠습니다!
물론 인터페이스 자체도 값을 잘 반환하는지 테스트 해야 합니다 ㅎㅎ
'스프링 > 미션' 카테고리의 다른 글
[Spring] racing - 후기 (1) | 2024.10.01 |
---|---|
[Spring] racing - API 서버 구현(2) (0) | 2024.09.30 |
[Spring] racing - API 서버 구현(1) (0) | 2024.09.30 |
[Spring] racing - 콘솔 프로그램 구현 (0) | 2024.09.30 |
[Spring] 미션 시작! (1) | 2024.09.30 |