개발관련/other

faking, mocking, stubbing의 차이점

Rateye 2021. 11. 26. 10:27
728x90
반응형
질문 : faking, mocking, stubbing의 차이점은 무엇입니까?

이 용어를 어떻게 사용하는지 알고 있지만 단위 테스트를 위해 faking , mocking , stubbing에 대한 정의가 허용되는지 궁금합니다. 테스트를 위해 어떻게 정의합니까? 각각을 사용할 수있는 상황을 설명하십시오.

사용 방법은 다음과 같습니다.

Fake : 인터페이스를 구현하지만 고정 데이터를 포함하고 논리는 포함하지 않는 클래스입니다. 구현에 따라 단순히 "양호"또는 "불량"데이터를 반환합니다.

Mock : 인터페이스를 구현하고 특정 메서드에서 throw 할 반환 / 예외 값을 동적으로 설정하는 기능을 허용하고 특정 메서드가 호출되었는지 / 호출되지 않았는지 확인하는 기능을 제공하는 클래스입니다.

Stub : 모의 클래스와 비슷하지만 메서드가 호출되었는지 여부를 확인하는 기능을 제공하지 않는다는 점이 다릅니다.

모의와 스텁은 모의 프레임 워크에 의해 직접 생성되거나 생성 될 수 있습니다. 가짜 클래스는 손으로 생성됩니다. 나는 주로 내 클래스와 종속 클래스 간의 상호 작용을 확인하기 위해 모의를 사용합니다. 상호 작용을 확인하고 코드를 통해 대체 경로를 테스트하고 나면 스텁을 사용합니다. 나는 주로 데이터 종속성을 추상화하거나 모의 / 스텁이 매번 설정하기에 너무 지루할 때 가짜 클래스를 사용합니다.

답변

 

Mock and Stub에 대한 Martin Fowler 로 부터

몇 가지 정보를 얻을 수 있습니다.

Fake 객체는 실제로 작동하는 구현을 가지고 있지만 일반적으로 프로덕션에 적합하지 않은 지름길을 사용합니다.

Stubs 은 테스트 중에 이루어진 통화에 대해 미리 준비된 답변을 제공하며, 일반적으로 테스트를 위해 프로그래밍 된 내용 이외의 항목에는 전혀 응답하지 않습니다. 스텁은 또한 '보낸'메시지를 기억하는 이메일 게이트웨이 스텁 또는 '보낸 메시지 수'와 같은 통화에 대한 정보를 기록 할 수 있습니다.

Mocks 는 우리가 여기서 이야기하고있는 것입니다 : 그들이받을 것으로 예상되는 호출의 사양을 형성하는 기대치로 미리 프로그래밍 된 객체입니다.

xunitpattern로 부터:

Fake: 우리는 SUT가 의존하는 구성 요소에서 제공하는 것과 동일한 기능의 매우 가벼운 구현을 획득하거나 구축하고 SUT가 실제 대신 사용하도록 지시합니다.

Stub :이 구현은 SUT 내에서 테스트되지 않은 코드 (X 페이지의 프로덕션 버그 참조)를 실행할 값 (또는 예외)으로 SUT의 호출에 응답하도록 구성됩니다. 테스트 스텁 사용에 대한 주요 징후는 SUT의 간접 입력을 제어 할 수 없기 때문에 테스트되지 않은 코드가 있다는 것입니다.

SUT (System Under Test)가 의존하는 객체와 동일한 인터페이스를 구현하는 모의 객체. SUT에서 메서드 호출의 부작용을 관찰 할 수 없기 때문에 테스트되지 않은 요구 사항 (X 페이지의 프로덕션 버그 참조)을 피하기 위해 동작 확인을 수행해야 할 때 모의 객체를 관찰 지점으로 사용할 수 있습니다.

개인적으로

Mock과 Stub을 사용하여 단순화하려고합니다. 테스트 된 클래스로 설정된 값을 반환하는 객체 인 경우 Mock을 사용합니다. Stub을 사용하여 테스트 할 Interface 또는 Abstract 클래스를 모방합니다. 사실, 그것은 당신이 그것을 부르는 것이 실제로 중요하지 않습니다. 그들은 모두 프로덕션에서 사용되지 않고 테스트를위한 유틸리티 클래스로 사용됩니다.

출처 : https://stackoverflow.com/questions/346372/whats-the-difference-between-faking-mocking-and-stubbing
728x90
반응형