> For the complete documentation index, see [llms.txt](https://yihyuns-gitbook.gitbook.io/today-i-learned/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yihyuns-gitbook.gitbook.io/today-i-learned/testing/test_double.md).

# Test Double (테스트 더블)

## 테스트 더블이란

특정 모듈에 의해 테스트의 진행이 어려울 때, 테스트를 진행할 수 있도록 본 모듈을 대체하는 모듈

## 테스트 더블 유형

### Dummy

* 객체 자체가 필요하지만 객체가 어떤 동작을 수행하든 상관이 없는 경우 사용 가능
* 호출 시 어떤 동작을 할지 보장하지 않음

### Fake

* 실제와 동일한 역할을 수행하지만 실제 객체보다 단순하게 동작

### Stub

* 호출 시의 응답을 정해둘 수 있는 Dummy
* 호출 시 미리 준비해둔 결과를 제공

### Spy

* 일부는 실제 기능을 호출하고 일부는 가짜(정해둔 결과)를 제공받고자 할 때 사용

### Mock

* 특정 조건의 호출이 일어나면, 그에 따라 정해진 동작을 처리하도록 미리 프로그래밍된 객체
* Stub은 객체의 상태 검증을 위해 사용되며, Mock은 객체의 동작(행위) 검증을 위해 사용됨
*
