문제

방금 Wikipedia 기사를 읽었습니다 모의 개체, 그러나 나는 여전히 그들의 목적에 대해 완전히 명확하지 않습니다. 실제 객체가 너무 복잡하거나 예측할 수 없을 때 테스트 프레임 워크에 의해 생성되는 객체 인 것 같습니다 (모의 객체의 값이 무엇인지 완전히 제어하기 때문에 100% 확신합니다).

그러나 모든 테스트가 알려진 값의 대상으로 이루어 졌다는 인상을 받았으므로 무언가를 놓치고 있어야합니다. 예를 들어, 코스 프로젝트에서 우리는 달력 응용 프로그램을 맡았습니다. 테스트 스위트는 여러 이벤트 객체, 다양한 서브 시스템 및 사용자 인터페이스 간의 상호 작용을 테스트 할 수 있도록 정확히 무엇인지 알고있는 이벤트 객체로 구성되었습니다. 나는 이것들이 모의 개체라고 생각하지만, 알려진 값의 객체가 없으면 시스템을 테스트 할 수 없기 때문에 왜 그렇게하지 않을지 모르겠습니다.

도움이 되었습니까?

해결책

모의 객체는 알려진 값을 가진 객체가 아닙니다. 테스트에서 사용할 수없는 복잡한 객체 (데이터베이스 연결 및 결과 세트와 같은)와 동일한 인터페이스를 갖는 객체이지만 테스트에서 제어 할 수있는 구현을 사용합니다.

이 객체를 즉석에 만들 수있는 조롱 프레임 워크가 있으며 본질적으로 다음과 같은 내용을 말할 수 있습니다. 0을 통과하면 true를 반환해야합니다. 그런 다음 foo ()를 사용하는 코드를 테스트하여 적절하게 반응 할 수 있습니다.

Martin Fowler는 조롱에 관한 훌륭한 기사를 가지고 있습니다.

다른 팁

클라이언트 및 서버 소프트웨어가있는 전형적인 사례를 생각해보십시오. 클라이언트를 테스트하려면 서버가 필요합니다. 서버를 테스트하려면 클라이언트가 필요합니다. 이것은 모의를 사용하지 않고 단위 테스트를 거의 불가능하게 만듭니다. 서버를 조롱하는 경우 클라이언트를 분리하여 테스트 할 수 있으며 그 반대도 마찬가지입니다.

모의 요점은 조롱하는 것들의 행동을 복제하는 것이 아닙니다. 테스트 프레임 워크에 의해 상태 변경을 분석 할 수있는 간단한 상태 머신 역할을하는 것이 더 중요합니다. 따라서 클라이언트 모의는 테스트 데이터를 생성하고 서버로 보내고 응답을 분석 할 수 있습니다. 특정 요청에 대한 특정 응답을 기대하므로 받으면 테스트 할 수 있습니다.

나는 모든 것에 동의합니다 @Lou Franco 그리고 당신은 @lou franco가 당신을 가리키는 테스트 복식에 대한 훌륭한 Martin Fowler 기사를 확실히 읽어야합니다.

테스트 더블 (가짜, 스터브 또는 모의)의 주요 목적은 테스트중인 객체를 분리하여 단위 테스트가 해당 객체 만 테스트하는 것입니다 (의존성이 아니라 다른 유형이 협력하거나 상호 작용하는 다른 유형).

객체에 의존하는 인터페이스를 제공하는 객체는 실제 의존성 대신에 사용될 수 있으므로 특정 상호 작용이 발생할 수있는 기대치를 배치 할 수 있습니다. 이것은 유용 할 수 있지만 국가 기반 대 상호 작용 기반 테스트에 대한 논란이 있습니다. 모의 기대를 과도하게 사용하면 부서지기 쉬운 테스트가 이어질 것입니다.

테스트 복식의 또 다른 이유는 데이터베이스 또는 파일 시스템 또는 시간이 많이 걸리는 작업을 설정하거나 수행하는 데 비용이 많이 드는 기타 유형에 대한 종속성을 제거하는 것입니다. 즉, 관심있는 객체를 최소한으로 테스트하는 데 필요한 시간을 유지할 수 있습니다.

예는 다음과 같습니다. 데이터베이스를 채우는 코드를 작성하는 경우 특정 메소드가 데이터베이스에 데이터를 추가했는지 확인할 수 있습니다.

테스트를 위해 데이터베이스 사본을 설정하면 테스트 된 메소드 호출 전에 레코드가 없다고 가정하고 한 번의 레코드가 없다고 가정하면 데이터베이스를 이전 상태로 롤백해야하므로 오버 헤드에 추가해야한다는 문제가 있습니다. 테스트를 실행합니다.

이전보다 한 번만 더 레코드가 있다고 가정하면 동일한 데이터베이스에 연결하는 두 번째 테스터 (또는 동일한 코드의 두 번째 테스트)와 충돌하여 종속성을 유발하고 테스트가 깨지기 쉽습니다.

모의를 사용하면 테스트를 서로 독립적으로 유지하고 쉽게 설정할 수 있습니다.

이것은 단지 하나의 예일뿐입니다 - 나는 다른 사람들이 더 많은 것을 공급할 수 있다고 확신합니다.

나는이 주제에 대한 다른 기고자들과 100%, 특히 Martin Fowler 기사에 대한 권장 사항과 동의합니다.

우리 책에 관심이있을 수 있습니다 http://www.growing-object-oriented-software.com/. 자바에 있지만 아이디어는 여전히 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top