테스트에 필요한 간접 입력 값을 제공하기 위해 스텁(stub)을 추가하거나 간접 출력 값을 검증하기 위해 목 객체(mock object)를 사용하는 것은 객체와 협력해야 하는 협력자에 관해 고민한 결과를 코드로 표현한 것이다.
"객체지향의 사실과 오해"를 읽다가 마주친 문장으로 4장 p.137 테스트-주도 개발에 대한 설명 중 나온 문장입니다. 스텁(stub)에 이어 목 객체(mock object) 또한 정리해 보겠습니다.
mock의 언어적 의미는 다음과 같습니다.
1. 거짓된, 가짜의
2. 모의의
목 객체(mock object)는 모의 객체라고도 하는 데 주로 객체 지향 프로그래밍으로 개발한 프로그램을 테스트할 경우 테스트를 수행할 모듈과 연결되는 외부의 다른 서비스나 모듈들을 실제 사용하는 모듈을 사용하지 않고 실제의 모듈을 흉내 내는 가짜 모듈을 작성하여 테스트의 효용성을 높이는 데 사용하는 객체입니다. 사용자 인터페이스(UI)나 데이터베이스 테스트 등과 같이 자동화된 테스트를 수행하기 어려운 때 널리 사용됩니다.
앞선 스텁(stub) 소프트웨어 테스트를 하는 데 있어서 입력(input)에 관한 것이었다면 목 객체(mock object)는 출력(output)에 관한 것입니다.
목 객체를 이용한 테스트는 다음과 같은 상황을 테스트하는 데 유용하게 사용됩니다.
- 사용자 인터페이스(UI) 테스트: 사용자의 반응이 필요한 테스트를 수행할 경우 사용자가 테스트에 참여해야 하기 때문에 자동화된 테스트를 수행하기가 어렵습니다. 이럴 경우 목 객체를 이용해 사용자의 응답을 흉내 내어 사용자의 개입 없이도 테스트를 수행할 수 있습니다.
- 데이터베이스 테스트: 자료의 변경을 수반하는 데이터베이스에 대한 작업을 테스트하는 경우 테스트 수행 후 매번 데이터베이스의 자료를 원래대로 돌려놔야 하는 데 이럴 경우 목 객체를 이용해 데이터베이스의 응답을 흉내 내어 데이터의 변경 없이 테스트가 가능합니다.
테스트-주도 개발에서는 자동화된 테스트가 필수적인 요소 중의 하나입니다. 하지만 테스트를 하는 데 있어서 사용자의 개입이 필요한 경우들이 있는데 이를 목 객체를 이용하여 상당 부분의 테스트를 사용자의 개입 없이 자동화할 수 있습니다.
데이터베이스 테스트 같은 경우 실제 데이터로 테스트를 수행하면서 데이터가 수정될 경우에 데이터의 신뢰성에 문제가 생길 수도 있기 때문에 애초에 데이터의 변경 없이 테스트가 가능하게끔 목 객체를 이용하는 것입니다. 또한 실제 데이터로 테스트를 수행하고 수정된 데이터를 다시 원상태로 복구하더라도 시간 비용적인 측면에서 그만큼 더 리소스가 소모되는 것이므로 목 객체를 이용하여 이를 절감할 수 있습니다.
https://ko.wikipedia.org/wiki/%EB%AA%A8%EC%9D%98_%EA%B0%9D%EC%B2%B4
모의 객체 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. -->
ko.wikipedia.org
'컴퓨터과학 > 용어사전' 카테고리의 다른 글
프로토타입 기반의 언어, 자바스크립트(JavaScript) (0) | 2023.02.10 |
---|---|
객체 기반의 스크립트 프로그래밍 언어, 자바스크립트(JavaScript) (0) | 2023.02.10 |
스텁(Stub) (0) | 2023.01.29 |