E D R , A S I H C RSS

Mock Objects

UnitTest를 위한 일종의 보조객체.

What ?

실제의 객체역할을 흉내내는 일을 하는 객체다. 보통 MockObject라는 클래스를 상속받아서 (구현은 각 언어별로 '알아서'다. ^^; 처음 Mock 의 개념 나온 컬럼은 Java 소스였다.) 만들어준다. 테스트를 위해서는 처음에 해당 객체에 초기설정을 해 둔다. 그리고 Test를 돌리게 된다.

말로 하면 좀 어렵고. --; 예를 들어서 설명하는게 좀 더 해하기 쉽겠다.

사용 예1) 여러 사람 프로그래밍 할때, 독립된 프로그램 아닌 모듈별로 프로그램을 만들고 있는 경우. 럴때 해당 모듈을 작성하고 테스트 코드를 만들려고 해도, 다른 모듈의 의존성 때문에 진행 어렵게 된다. 아직 완성되지 않은 의존성을 가진 모듈을 MockObject로 만듬으로서 해당 모듈을 만드는 동안의 의존성문제를 해결할 수 있다.
인터페스가 확실하게 정해지지 않은 모듈에 대해서는 어떻게 할 것인가?

-> MockObjects 자체가 인터페스정의를 위한 도구로 용할 수 있다. (TestFirstProgramming 에서는 Test Code가 일종의 인터페스를 정의하기 위한 방법으로 용된다.)

사용 예2) Datatbase 와 관련된 프로그래밍에 대해서 UnitTest를 할때, DB Connection 에 대한 MockObject를 만들어서 DB Connection을 용하는 객체에 DB Connection 객체 대신 넣어줌으로서 해당 작업을 하게끔 할 수 있다. 그리고 해당 함수 부분 제대로 호출되고 있는지를 알기 위해 MockObject안에 Test 코드를 넣어 줄 수도 있다.

문제점

MockObject 는 어디까지나 가짜객체다. 실제 테스트를 할때에는 MockObject용한 경우와 실제의 객체를 용했을때의 경우 둘 다 고려해야 한다.

그리고 위와 같은 경우 UnitTest 코드의 중복을 가져올 수도 있다. 는 상속과 오버라딩을 용, 해결한다.

어떻게 구현하고 사용할까 ?

본래 MockObjects 관련 글은 Java 소스지만 각 언어에 따라 나름대로 구현할 방법 있겠다.
위의 framework 에서는 대강 렇다.
Class Name 역할
MockObject Mock Object들의 상위클래스. Mock Object들은 MockObject 들을 상속받아서 구현한다.
Expectation 소위 말하는 '기대값' 을 위해 미리 Mock Object에 예정된 값들을 채워넣기 위한 클래스들. MockObject는 자신의 구현을 위한 자료구조체로서 Expectation 클래스들을 용할 수 있다.
ExpectationCounter 해당 함수의 기대하는 호출횟수를 카운트 하기 위한 도움 클래스
ExpectationList List 도움 클래스
ExpectationSet 집합 도움 클래스. 내부적으로는 Dictionary를 용, flag check
ExpectationMap Key : Value. Map 도움 클래스

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:47
Processing time 0.0167 sec