얼마 전에 나는 찾을 수없는 스택 오버플로 답변에서 공개 API를 테스트해야한다고 설명하는 문장을 읽었으며 저자는 인터페이스를 테스트해야한다고 말했습니다. 저자는 또한 메소드 구현이 변경되면 테스트 케이스를 수정할 필요가 없다고 설명했다. 이렇게하면 테스트중인 시스템이 작동하는 계약을 깨뜨릴 수 있기 때문이다. 즉, 메소드가 작동하지 않으면 테스트가 실패하지만 구현이 변경 되었기 때문에 실패해야합니다.
우리가 조롱에 관해 이야기 할 때 이것은주의를 끌었습니다. 모의는 테스트 대상 시스템의 종속성 호출에 크게 의존하므로 모의는 인터페이스가 아닌 구현과 밀접하게 연결됩니다.
mock vs stub을 연구하는 동안 여러 기사에서 스터브는 mock 대신 mock을 사용해야한다는 데 동의합니다.
내 질문은 :
- 모의가 공개 / 폐쇄 원칙을 위반합니까?
- 마지막 문단에서 스텁을지지하는 주장에 빠진 것이 있습니까?
- 그렇다면 언제 모의하기에 좋은 유스 케이스이고 스텁을 사용하기에 좋은 유스 케이스는 언제입니까?
Since mocking relays heavily on expectation calls from system under test's dependencies...
나는 이것이 당신이 엉망인 곳이라고 생각합니다. 모의는 외부 시스템의 인공적인 표현입니다. 외부 시스템에 의존하는 코드에 대해 테스트를 실행할 수 있도록 외부 시스템을 시뮬레이션 하는 경우를 제외하고는 외부 시스템을 나타내지 않습니다 . 코드가 실제의 조롱되지 않은 시스템