"스텁"이란 무엇입니까?


116

그래서 TDD에 더 많이 들어가기 위해 새해 결심을 계속하면서 이제 Rhino Mocks 와 더 많이 작업하기 시작했습니다 .

내가하고 싶은 한 가지는 내가 무엇을하고 있는지 정말로 이해하고 있는지 확인하는 것이므로 지금까지 본 것에 대한 이해를 확인하고 싶었습니다 (그리고 여기에있는 것이 좋을 것이라고 생각했습니다. 자원).

"스텁"은 무엇입니까?


6
먼저 질문 한 다음 대답을하나요?
empi

17
질문에서 언급했듯이-나는 내 이해가 정확하다는 것을 확인하기 위해 여기에 (내 것이 든 아니든) 대답이 많이 요청되었지만 드물게 잘 대답 된 질문에 대한 리소스를 제공하기를 원했습니다. )
Rob Cooper

42
또한 자신의 질문에 답하는 것은 사이트를 사용하는 유효한 방법으로 FAQ에 표시되어 있습니다. 실제로 권장되어야합니다.
Erik Forbes

자신의 질문에 답하는 것이 좋지만, 질문 자체에는 너무 많은 소음 (자서전)이 있고 답을 찾으려고 노력하지도 않고 답을 찾기 위해 그 사람이 한 일에 대한 성향도 없습니다.
에릭

답변:


112

Martin Fowler는 이 주제에 대한 훌륭한 기사 를 썼습니다 . 그 기사에서 :

Meszaros는 테스트 목적으로 실제 개체 대신 사용되는 모든 종류의 가상 개체에 대한 일반적인 용어로 Test Double이라는 용어를 사용합니다. 이름은 영화에서 스턴트 더블이라는 개념에서 비롯되었습니다. (그의 목표 중 하나는 이미 널리 사용 된 이름을 사용하지 않는 것이 었습니다.) 그런 다음 Meszaros는 네 가지 특정 유형의 이중 유형을 정의했습니다.

  • 더미 오브젝트는 전달되지만 실제로 사용되지는 않습니다. 일반적으로 매개 변수 목록을 채우는 데 사용됩니다.
  • 가짜 객체는 실제로 작동하는 구현을 가지고 있지만 일반적으로 프로덕션에 적합하지 않게 만드는 지름길을 사용합니다 (인 메모리 데이터베이스가 좋은 예입니다).
  • 스텁은 테스트 중에 이루어진 호출에 대해 미리 준비된 답변을 제공하며, 일반적으로 테스트를 위해 프로그래밍 된 내용 이외의 항목에는 전혀 응답하지 않습니다. 스텁은 또한 '보낸'메시지를 기억하는 이메일 게이트웨이 스텁 또는 '보낸 메시지 수'와 같은 통화에 대한 정보를 기록 할 수 있습니다.
  • 모의는 우리가 여기서 이야기하고있는 것입니다 : 그들이받을 것으로 예상되는 호출의 사양을 형성하는 기대치로 미리 프로그래밍 된 객체.

내 말로 표현하자면 : 모의 객체는 특정 메서드가 호출 될 것으로 "예상"하며, 일반적으로 기대치가 충족되지 않으면 단위 테스트가 실패합니다. Stub 객체는 미리 준비된 응답을 제공하지만 (도우미 라이브러리에 의해 자동 생성 될 수 있음) 일반적으로 단위 테스트가 실패하도록 직접 유발 하지는 않습니다 . 일반적으로 테스트중인 개체가 작업을 수행하는 데 필요한 데이터를 가져 오기 위해 사용됩니다.


2
그렇다면 가짜 물건과 sutbs의 차이점은 무엇입니까? 말씀 하셨듯이 구현해야 할 역할이 동일하지 않습니까?
LKM

4
@LKM 가짜 개체는 실제 기능을 구현하고 작업을 수행하는 실제 개체입니다. 스텁은 "미리 준비된 답변"입니다. 웹 서버에서 반환되는 내용을 모방하는 하드 코딩 된 JSON 결과.
user3344977

31

"스텁"은 데이터 / 일종의 응답을 제공하기 위해 존재하는 인터페이스의 구현입니다. 예를 들면 :

  • 데이터 세트
  • 사용자 목록
  • XML 파일

일반적으로 이것은 다른 서비스 (웹 서비스, 다른 응용 프로그램, 데이터베이스 등)에서 제공되지만 코드 의 테스트 가능성 을 향상시키기 위해 결과는 "가짜"입니다.

이것의 주요 이점은 예상되는 데이터를 기반으로 단위 테스트에서 어설 션을 만들 수 있다는 것입니다. 데이터 오류로 인해 오류가 발생하면 테스트를 쉽게 추가하고 새 스텁 (데이터 오류 복제)을 만들고 코드를 생성하여 오류를 수정할 수 있습니다.

스텁 은 객체 의 상태 를 표현하고 테스트하는 데 사용되는 반면 Mock은 상호 작용을 테스트 한다는 점에서 Mocks 와 다릅니다 .


답변 해 주셔서 감사합니다.하지만 여전히 이해가되지 않습니다 : "인터페이스 구현"??
BKSpurgeon

6

나는 "스텁"이 STartUpBlock에서 나온다고 믿습니다. 개발자가 시작하는 데 도움이되도록 자동 생성되는 코드 부분을 참조하는 데 사용됩니다.


1
나는 이것이 옳다고 생각하지 않는다. : 아마이 주택 건설 연습에서 오는 hunker.com/12000314/what-is-a-stub-out
mattdm

3

"스텁"또는 "스텁 메서드"는 시작 코드 또는 아직 개발되지 않은 코드를 임시로 대체하도록 설계되었습니다. IDE에서 생성 한 내장 코드입니다. 스텁 메서드는 실제로 특정 클래스의 메서드를 테스트하는 데 사용되는 메서드입니다. 실제 개발 방법에서 로컬 변수에 대한 일부 값을 입력하고 출력이 올바른지 확인하여 사용합니다. 코드에서 버그를 찾는 것이 중요합니다.


이 대답은 더 자세히 설명하면 더 좋을 것입니다. stub 메서드의 목적은 무엇입니까? 어떻게 사용됩니까? 왜 중요 함?
Evan Weissburg

감사! 저는 프로그래밍이 처음이고 소프트웨어 개발에 대해 배우기 시작했습니다. 지금까지 이것이 스텁 메서드에 대해 이해 한 것입니다. 그래서 나는 그것의 목적, 중요성, 그리고 그것이 어떻게 사용되는지 정말로 확실하지 않습니다. 하지만 스텁 메서드는 실제로 특정 클래스의 메서드를 테스트하는 데 사용되는 메서드라고 생각합니다. 실제 개발 방법에서 로컬 변수에 대한 일부 값을 입력하고 출력이 올바른지 확인하여 사용합니다. 코드에 대한 버그를 찾는 것이 중요합니다. 추가하거나 수정할 다른 것이 있으면 의견을 보내주십시오. 저는 현재 테스트에 대해 배우고 있습니다.
Nasserr

1
당신이 배우고 있다는 것이 좋습니다! 향후 독자가 댓글에 게시하는 대신 쉽게 배울 수 있도록 원래 답변을 수정해야합니다. 또한-확실하지 않은 경우 그에 대한 권위있는 답변을 게시하는 이유는 무엇입니까?
에반 Weissburg

1
자기 학습자라면 괜찮습니다 .StackOverflow에서는 확실하지 않은 한 답변을 게시 할 필요가 없습니다. 이것은 표준 포럼이 아닙니다. 참조 : stackoverflow.com/tour
에반 Weissburg

1
가이드와 제안에 감사드립니다. 정말 감사합니다!
Nasserr

3

나는 최근에 질문에 직면했고 StubDriver의 비교 가 정말 명확하고 도움 이된다는 것을 깨달았습니다 .

기본적으로 스텁과 드라이버는 자신을 선언하고 허용하는 매개 변수를 제외하고는 실제로 아무것도하지 않는 루틴입니다. 그런 다음 나머지 코드는 이러한 매개 변수를 입력으로 사용할 수 있습니다.

+ --------- + ------------------------------- + ------- ------------------------ +
| | 스텁 | 드라이버 |
+ --------- + ------------------------------- + ------- ------------------------ +
| 유형 | 더미 코드 | 더미 코드 |
+ --------- + ------------------------------- + ------- ------------------------ +
| 사용 | 하향식 통합 | 상향식 통합 |
+ --------- + ------------------------------- + ------- ------------------------ +
| 목적 | 상단의 테스트를 허용하려면 | 낮은 테스트를 허용하려면 |
| | 코드 수준, 때 | 코드 수준, 때 |
| | 낮은 수준의 코드는 | 코드의 상위 수준은 |
| | 아직 개발되지 않았습니다. | 아직 개발되지 않았습니다. |
+ --------- + ------------------------------- + ------- ------------------------ +
| 예 | A와 B는 구성 요소입니다. | A와 B는 구성 요소입니다. |
| | A ---> B | A ---> B |
| | | |
| | A가 개발되었습니다. | 아직 개발이 필요합니다. |
| | B는 아직 개발이 필요합니다. | B가 개발되었습니다. |
| | 따라서 스텁이 사용됩니다. | 따라서 드라이버가 사용됩니다. |
| | 그것을 모방하기 위해 B 대신. | 대신 A 대신 모방 |
| | | |
| | A ---> 스텁 | 드라이버 ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

에서 스텁 및 드라이버의 차이


0

몇 가지 조사를 마치고 코더 생활 중에 직면 한 스텁 파일을 기반으로 스텁 파일은 파일 구현의 전체 또는 일부를 포함하는 파일이라고 말할 수 있습니다. 개발자가 코딩을 시작하는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.