테스트 더블
테스트 더블은 테스트 하고자 하는 기능을 다른 요소들과는 분리된(isolated) 환경에서 독립적으로 유닛 테스트를 수행할 수 있게 해주는 객체이다.
테스트 대상이 되는 어떤 클래스가 다른 클래스 객체에 의존하고 있다면 클래스의 테스트를 실행할때 부득이하게 의존하는 클래스의 코드도 실행하게 된다. 이렇게 되면 의존 클래스 코드에 버그가 있어서 테스트가 실패할 수도 있는데, 테스트 실패시 원인을 테스트 대상 클래스 뿐만 아니라 의존 클래스까지 살펴가며 찾아봐야 한다. 이런 상황이 분리되어 있지 않은 환경에서 테스트를 할때의 문제점이다.
테스트 더블은 클래스가 의존하고 있는 다른 클래스의 객체로 전달되며, 테스트 작성자가 동작을 제어할 수 있는 객체를 의미한다. 다음 5가지 종류가 있다.
- Dummy : 아무런 동작도 하지않는 단순 인터페이스 구현체.
- Stub : Dummy 와 유사하지만 리턴값을 반환하는 메소드에서는 일정한 데이터를 반환.
- Fake : 테스트를 동작시킬 정도의 기능만 간단하게 구현해서 테스트를 실행시킬 수 있도록 도와주는 구현체.
- Spy : 실제 클래스 객체이나 어떤 메소드가 몇번 호출되었는지, 어떤 파라미터와 함께 호출되었는지를 알려주는 객체
- Mock : Spy 와 유사하나 어떤 메소드가 호출되었을때 어떤 기능을 수행하게 할것인지도 개발자가 컨트롤 할 수 있게 해주는 객체
테스트 더블
테스트 더블은 테스트 하고자 하는 기능을 다른 요소들과는 분리된(isolated) 환경에서 독립적으로 유닛 테스트를 수행할 수 있게 해주는 객체이다.
테스트 대상이 되는 어떤 클래스가 다른 클래스 객체에 의존하고 있다면 클래스의 테스트를 실행할때 부득이하게 의존하는 클래스의 코드도 실행하게 된다. 이렇게 되면 의존 클래스 코드에 버그가 있어서 테스트가 실패할 수도 있는데, 테스트 실패시 원인을 테스트 대상 클래스 뿐만 아니라 의존 클래스까지 살펴가며 찾아봐야 한다. 이런 상황이 분리되어 있지 않은 환경에서 테스트를 할때의 문제점이다.
테스트 더블은 클래스가 의존하고 있는 다른 클래스의 객체로 전달되며, 테스트 작성자가 동작을 제어할 수 있는 객체를 의미한다. 다음 5가지 종류가 있다.