iOS

Test Doubles - fake, stub, mock

GREEN.1229 2021. 7. 22. 08:19

안녕하세요. 그린입니다🟢

이번 포스팅에서는 Test Double의 3가지 종류에 대해 알아보고 구분해보겠습니다🧑🏻‍💻

 

우선 테스트 더블??

테스트 더블은 자동화 테스트에서 실제와 유사하게 동작하면서 단순한 개체를 사용하여 동작시켜보거나 하는 테스트 과정에서

복잡성을 낮추고 독립된 코드를 테스트 검증할 수 있는 테스트 환경에서 이러한 테스트 개체가 사용되는것 입니다.

 

테스트 더블의 종류

 1) fake
 - 상용되는 로직 구현과 동일하게 가짜로 로직 구현을 만들고 서버 DB대신 인메모리 DB 정의하여 해당 정보로 테스트

   (프로덕션 구현보다 단순하게 만들 있음)

 - 예를들어 네트워크 통신을 하여 서버 DB를 받아 데이터를 뿌려주는 로직을 fake로는 네트워크 통신을 하지 않고 테스트 객체를 만들어 실제 통신이 되어 이뤄지는 전 과정을 동일하게 수행하여 테스트 하는 방식


 2) stub 

 - 호출 반환되는 값을 미리 정의하여 반환 수행함, fake보다 낮은 테스트인게 항상 동일한 값을 반환하기에 복잡하고 상태에 따른 다양한 테스트가 불가능

 - fake와 유사할 수 있지만 로직안에서 반환값이 항상 동일하기에 로직이 잘 처리되고 있는것에 대한 판별이 힘듬

 - 객체를 다양한 조건으로 값을 만들어주고 던져줘도 항상 동일한 값을 반환


 3) mock

 - 동작을 확인하는 테스트, 단위테스트에서는 거의 필요하지 않는 테스트로 단순히 해당 작업을 수행했는지 확인하는 테스트

 - 비동기처리나 쓰레드가 몇번 불렷는지 판별할때 사용됨 (호출에 대한 검증 같은..!?)

 

현재까지 mock만 알고있었고 fake와 stub이라는것을 몰랐던 환경에서 다 mock으로 개념을 칭하고 사용했었습니다.

엄연히 테스트 용도가 다른 종류인걸 알게 되어 앞으로는 구분하여 메서드명을 짓고 개념에 따라 테스트를 하는 TDD 방식의

프로젝트를 진행해봐야겠습니다🙌

 

[참고자료]

https://blog.pragmatists.com/test-doubles-fakes-mocks-and-stubs-1a7491dfa3da

 

Test Doubles — Fakes, Mocks and Stubs.

In automated testing it is common to use objects that look and behave like their production equivalents, but are actually simplified. This reduces complexity, allows to verify code independently from…

blog.pragmatists.com