강의 중 Stub과 Mock의 차이점에 대해 의문이 들어 찾아봤다.
Test Double
테스트 목적으로 실제 객체의 대역을 test double이라 한다.
설명만 들었을 때 Stub과 Mock객체의 설명이 매우 비슷하다고 생각이 든다. 그렇다면 차이점은 무엇일까?
기존의 테스트에서 Test Double은 테스트 대상 객체가 Collaborator(ex.Repository 객체)가 필요한 경우에 만들어서 사용하는데, 두가지 이유가 있다.
하지만 mock객체는 행동에 대한 검증을 한다.
기존 객체 사용법
mock객체 사용법
차이점
기존(Stub등등) | Mock | |
---|---|---|
객체 선언 | 설정 | 객체 선언 - 기대되는 동작 선언 |
올바르게 작동했는지 상태 검증 | 검증 | 올바르게 호출 했는지 행동 검증 |
스스로 검증 x | 검증 주체 | 스스로 검증 |
테스트 메서드 구현 해야함. | 추가 메서드 | 추가 메서드 구현 x |
Test Double을 사용할 때 sut와 collaborator객체의 관계를 고려하여 선정해야 한다.
간단한 관계를 가질경우 어느 test double없이 기존 객체로 행동 검증을 하면 될 것이다.
그렇지 않다면 실제 객체를 사용하기는 까다롭기 때문에 test double을 사용하면 된다. stub, mock등을 결정하는 것 보다 test double을 사용하냐 하지않느냐를 결정하는게 중요하다!
stub과 mock의 차이점은 스스로 검증하는지, 행동,상태에 대한 검증인지이다.
이 부분을 고려해서 test할 때 활용해보자