프로그래밍에서 스터 빙은 무엇을 의미합니까?


답변:


30

스텁 메소드는 단순하지만 유효한 (반드시 정확한 것은 아니지만) 결과를 리턴하는 메소드입니다.

일반적으로 인프라를 구축 할 때 만들어지며 현재 필요한 모든 방법에 시간을 투자하고 싶지 않습니다. 대신 스텁을 작성하여 모든 것이 컴파일되고 IDE의 자동 완성 기능은 사용하려는 메소드에 대해 알 수 있습니다.

스텁이 사용되는 또 다른 장소는 테스트 할 때 조롱하는 것입니다. 종속성 주입을 통해 일반적인 종속성 대신 스텁 메소드를 제공하여 고정 된 결과를 리턴 한 다음 코드가 올바른 방식으로 작동하는지 확인하십시오. 이렇게하면 테스트하려는 코드로 테스트가 분리되므로 해당 테스트를 실행하기 위해 데이터베이스를 가동 할 필요가 없습니다.


3
Nitpick : 스텁은 조롱 할 때가 아니라 스터 빙 할 때 사용됩니다. 조롱 할 때는 조롱을 사용합니다. martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag

위의 경우 +1이지만 스텁 된 메소드가 아직 사용되지 않을 것으로 예상되는 경우 스텁이 예외를 던지거나 오류가 발생하는 것이 도움이 될 수 있습니다. "NotImplementedException"예 : msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Dan Armstrong

6

아마도 이것은 구체적인 예로 가장 잘 대답 될 것입니다. 데스크탑 애플리케이션을 작성하는 경우를 고려하십시오. 당신은라는 기능을 가지고하기로 결정했습니다 createMenubar, createToolbar그리고 createMain그래서 당신의 응용 프로그램 생성자는 단정하고 깔끔입니다.

기본 코드는 다음과 같습니다 (이 예제는 파이썬).

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

모든 것이 작동 할 때까지 주요 기능이 실패하므로 개발 중에 앱을 어떻게 테스트 할 수 있습니까? 예를 들어에서 작업을 시작 createMenubar하면 GUI의 도구 모음 또는 기본 영역을 구현하지 않았기 때문에 메뉴 표시 줄을 작성한 후 초기화에 실패합니다.

이 스텁가 와서 어디라는 함수를 만들 수 있습니다. 인 createToolbarcreateMain그 충족 실제로 구현하지 않고 응용 프로그램 생성자 (이 기능이 존재, 즉 것을)의 요구 사항. 이러한 기능은 스텁입니다.

def createToolbar():
    pass

def createMain():
    pass

이러한 스텁을 사용하면 도구 모음 또는 프로그램의 주요 부분에 대해 걱정할 필요없이 기본 프로그램 및 메뉴 표시 줄을 구현할 수 있습니다. 결국 툴바로 이동하여 스텁을 실제 기능으로 바꿉니다. 마지막으로 스텁을 제거하고 createMain실제 구현을 제공합니다.

스텁은 반드시 아무 것도 할 필요는 없습니다. 예를 들어 이러한 스텁은 앱 생성자가 배치 할 수있는 빈 컨테이너 위젯을 작성할 수 있습니다. 요점은 당신이 더미 함수 나 객체 생성한다 충분히 당신이 그것을 개발하는 동안 다른 코드를 실행할 수 있도록하기를. 시간이 지남에 따라 신청이 완료 될 때까지 스텁을 하나씩 교체합니다.


2

"스텁"은 "하향식"프로그래밍에 사용됩니다. 그때부터 일반에서 특정까지 응용 프로그램을 빌드 할 때입니다. 이렇게하면 아직 구축하지 않은 특정 응용 프로그램에 대해 "스텁"을 "자리 표시 자"로 사용하게됩니다. 그들은 종종 더미 또는 임의의 값과 같은 것을 프로그램의 더 일반적인 부분으로 반환합니다. 스텁은 프로그램의 더 "고급"부분을 만들기에 충분한 가치를 제공합니다. 스텁을 실제 계산 또는 값으로 교체하거나 장착 할 때까지.

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