본문 바로가기

우아한테크코스

테스트하기 어려운 코드

요구사항 1 - 테스트를 위한 메소드 제거

chess.Board 객체는 체스판을 추상화한 객체이다. 이 객체를 보면 체스판을 초기화하기 위해 initialize(), initializeEmpty()가 존재한다.

initialize()는 체스 게임을 시작하기 위해 체스판을 초기화하는 메소드이고, initializeEmpty()는 테스트를 위한 목적으로 구현했다. 테스트를 위한 initializeEmpty()가 Board에 있는 것이 적합하지 않다.

구조를 변경해 테스트 목적으로 추가한 initializeEmpty() 없이도 테스트 가능하도록 리팩토링한다.

힌트: 인터페이스를 활용한다.

요구사항 2 - 테스트하기 어려운 코드를 테스트 가능한 구조로 변경

다음 Car 객체의 move() 메소드의 이동/정지를 테스트하고 싶은데 테스트하기 힘들다.

racingcar.CarTest에 2개의 Test Case가 있는데 이 Test Case가 항상 성공해야 한다. 단, random 값을 메소드의 인자로 전달해 해결하면 안된다.

힌트: 인터페이스를 활용한다.

=> 개발자가 테스트함에 있어서 테스트하기 어려운 코드는 철저하게 분리할 필요가 있다.

 

 

그렇다면 데이터베이스에 의존한다면 테스트는 어떻게?

=> 가짜 객체를 만든다 (인터페이스를 이용)

데이터베이스가 동작하는 방식과 비슷한 클래스(A라 하자)를 만들어 인터페이스로 연결시켜주고

A를 테스트 하는 방식으로 할 수 있다.

반응형

'우아한테크코스' 카테고리의 다른 글

준 강의 - 프론트엔드 기본 꿀팁  (0) 2020.05.15
api 설계  (0) 2020.05.12
데이터 베이스  (0) 2020.04.24
람다와 스트림  (0) 2020.03.20
클래스와 인스턴스  (0) 2020.03.17