2월, 2019의 게시물 표시

[Spring] Mock framework에 대하여

이미지
Mock에 대하여 Mock Framework   목(Mock)이 무엇이고 왜 필요하죠? 우리가 Junit 으로 테스트를 할때에는 보통 어떤 시스템에 입력을 주었을 때 기대하는 출력이 나오는지를 주로 검증하게 됩니다. 단위 테스트에서는 보통 입력 값을 테스트 대상 오브젝트의 메소드의 파라미터로 전달하고 메소드의 리턴 값을 출력 값을 보고 검증합니다 다음과 같이 말이죠! public class TestEx { ​ //평범하게 파라미터로 들어온 값을 반환하는 함수입니다. public int printInteger ( int i ) { return i ; } @Test public void IntegerTest () { // 5가 출력이 되었는지 단위테스트를 해준다. assertThat ( printInteger ( 5 ), is ( 5 )); } } ​   하지만 이렇게 단순히 리턴 값 출력을 하는것이 아니라 테스트 오브젝트가 간접적으로 의존 오브젝트 (써드파티 라이브러리 등 내가 만들지 않고 다른사람이 만든 API) 가 그 행위가 제대로 이루어 졌는지 검증하고싶다면 어떻게 할까요? 아래와 같이 검증합니다!       이런 경우에는 테스트 대상의 간접적인 출력 결과를 검증해야하고, 테스트 대상 오브젝트와 의존 오브젝트 사이에서 일어나는 일을 검증할 수 있도록 특별히 설계된 목 오브젝트(Mock Object) 라는 것이 있습니다. 목 오브젝트 는 테스트 오브젝트가 정상적으로 실행되도록 도와주면서 테스트 오브젝트와 자신의 사이에서 일어나는 커뮤니케이션 내용을 저장해뒀다가 테스트 결과를 검증하는데 활용할 수 있게 해줍니다. 데이터베이스, 웹서버, 웹애플리케이션서버 ,FTP 서버 등 환경 구축을 위한 작업시간이 필요한 경우에 사용합니다. 특정 모듈을 갖고 있지 않아서 테스트 환경을 구축하지 못하거나 다른 사람과 협의나 정책이 필요한 경