실용주의 단위테스트. 10장. 목 객체 사용

실용주의 단위테스트. 10장. 목 객체 사용

테스트 도전 과제

테스트에서 실제로 HTTP 호출을 해서는 안됩니다. 그 이유는

- 실제 호출에 대한 테스트는 나머지 대다수의 빠른 테스트들에 비해 속도가 느릴 것입니다.

- HTTP API가 항상 가용한지 보장할 수 없습니다. 통제 밖입니다.

번거로운 동작을 스텁으로 대체

스텁: 테스트 용도로 하드 코딩한 값을 반환하는 구현체.

의존성 주입: 테스트 시, 스텁을 주입하여 HTTP API 호출에 대한 응답으로 사용합니다.

테스트를 지원하기 위한 설계 변경

의존성을 주입할 수 있도록 설계를 변경함으로써 테스트를 작성할 수 있었습니다. 의존성을 주입하는 방법으로는 생성자 주입, 세터 메서드, 팩토리 메서드 오버라이드, 추상 팩토리 등이 있고, 구글 주스나 스프링 같은 도구를 사용할 수도 있습니다.

목을 올바르게 사용할 때 중요한 것

목을 올바로 사용하고 있는지 확인하기 위해 스스로에게 던져야하는 질문들이 있습니다.

- 목이 프로덕션 코드의 동작을 올바르게 묘사하고 있는가?

- 프로덕션 코드는 생각하지 못한 다른 형식으로 반환하는가?

- 프로덕션 코드는 예외를 던지는가? null을 반환하는가?

목을 사용한다는 건, 직접 테스트되지 않는 프로덕션 코드가 있다는 뜻입니다. 이 때문에 단위테스트 커버리지에 구멍이 생길 수 있는데, 통합 테스트를 통해 이 구멍을 막아야합니다.

from http://utrpanic.tistory.com/65 by ccl(A) rewrite - 2021-11-28 19:01:36