2009-10-05 4 views
14

방금이 재미 있은 YouTube Video about unit testing을 보았습니다. (유머 감각이 좋지 않으면 건너 뛰십시오.) 스텁이 비판적으로 비판하는 곳입니다. 하지만 스텁이 무엇이 잘못된지 이해하지 못합니다.단위 테스트를위한 스텁의 문제점은 무엇입니까?

나는 조롱 프레임 워크를 사용하지 않았으며, 사용하지 않는 것으로부터 고통을 느끼기 시작하지 않았습니다.

나는 선, having chosen handwritten stubs and fakes instead of mocks (like Rhinomock etc)? (사용 파울러의 분류) 모의 필기 스텁 사이 따기위한 고려 사항은 무엇

아래 언젠가 세계에 대한 상처에 있습니까?

+1

너는 mocking framework (나는 rhino를 사용)를 사용하여 너 자신에게 그것을 빚지고있다. TDD 생활을 편하게하기 위해 할 일이 많이 있습니다. – mxmissile

답변

11

스텁에는 문제가 없으며 스텁, mock ... 및 스파이를위한 공간이 있습니다. 모두가 "테스트 복식"이지만, Mocks and Stubs aren't Spies에서 설명한 것과 같이 다른 용도로 사용됩니다.

[...] 계속하기 전에, 을 사용하여 몇 가지 용어를 명확히하고 정의하고 싶습니다. 여기에서 처음 발견 한 것은 Gerard Meszaros 'xUnit Patterns book입니다.

  • 더미 객체는 테스트 대상 시스템 으로 전달되었지만 사용 된 적이없는 자리 표시 자 객체입니다.
  • 시험 스텁 간접 입력과 테스트중인 시스템을 제공
  • 시험 스파이 테스트중인 시스템은 모의 객체가 간접적으로 테스트중인 시스템을 제공
  • 수행 올바른 간접 출력을 검증하는 방법을 제공한다 입력 와 방법이 간접 출력을 확인하는

[...] 그리고 당신은 이 편리한 차트를 보자 당신의 결정을 안내 할 수 있습니다

alt text http://www.hamletdarcy.com/files/2007/MocksAreNotSpies.jpg

추 신 : Mockito - The New Mock Framework on the Block도 읽을만한 가치가 있습니다. 이 경우 A의 가짜 뭔가를 말한다면

가짜스텁라고 :

+0

+1. – TrueWill

+1

차트의 경우 0.5, 차트의 경우 – guerda

+1

-1 링크의 경우 +0.5는 기본적으로 잘못되었습니다. 가짜는 단언에서 실패 할 수 있고, 유지하기가 더 쉬울 수 있으며, 모든 곳에서 사용하기가 훨씬 쉽습니다. 차트가 오래된 것일 수도 있고 이전의 조롱하는 프레임 워크 나 오래된 언어/자바 버전의 프레임 워크에 맞지 않을 수도 있습니다. (실제 투표는 -1이 아니지만 차트가 좋지 않습니다.) –

5

모의 객체는 입력하기가 훨씬 쉽습니다.이 객체는 클래스의 실제 인스턴스로, 최소한의 상용구를 사용하여 모든 메소드의 동작을 무시할 수 있도록 미리 정의되었습니다.

다음과 같은 몇 가지 고려 사항이 있습니다. 어떤 방법을 다루고 싶지 않으면 테스트를하지 않거나 테스트를 실패 할 수 있습니다. 사실상 코드가 없습니다.

수업을 마칠 때 얼마나 많은 상용구가 생깁니 까? 수업이 끝나면 어떻게 처리합니까? 클래스 패스에서 스텁을 얻으려면 트릭을 사용합니까, 아니면 다른 소스를 사용합니까?

그냥 모의를 시작하는 것이 좋습니다. 모든 곳에서 더 쉬워졌습니다.

0

실물 단위 테스트를 수행하기 위해 모의 (mocks)와 스텁 (stub)이 사용됩니다. 모든 의존성을 조롱하고 클래스를 개별적으로 테스트합니다.

저는 조롱과 스터 빙을 위해 현재 MOQ을 사용하고 있습니다.

3

mock 대신 스텁을 사용하는 데는 아무런 문제가 없습니다.

기술적 인면에서 mock은 기대할 수있는 "스마트"오브젝트입니다. 스텁은 미리 설정된 값을 반환하는 더미 객체입니다. Mocks Aren't Stubs을 참조하십시오.

그러나 많은 사람들 (자신 포함)은 mock을 사용한 동작 테스트보다는 스텁으로 상태 테스트를 선호합니다. 테스트 할 클래스에 스텁을 삽입하고 메소드를 호출 한 다음 테스트중인 클래스의 상태를 확인합니다. 클래스의 내부가 인수 Y를 사용하는 모의 객체의 메소드 X를 호출한다고 주장하는 것보다 덜 부서지기 쉬운 테스트를하는 경향이 있습니다.

나는 당신이 상처의 세계에 있다고 생각하지 않습니다. 고통을 느끼기 시작하지 않았다면 아직 고립/조롱 프레임 워크가 필요하지 않을 것입니다. 언제, 필기 스필/가짜를 쓰는 것이 무엇이든 해를 끼치 지 않을 것입니다.

인터페이스가 많거나 인터페이스에 많은 메소드가있는 경우 분리/조롱 프레임 워크가 손으로 코딩하는 스텁보다 많은 시간을 절약 할 수 있습니다.

나는 많은 것을 좋아한다. Moq; 스텁을 만드는 데 Rhino Mock보다 사용하기가 더 쉽습니다.

8

나는 (로이 Osherove, 단위 - 테스트의 예술의 저자에 의해 도입) 다음과 같은 용어를 사용 메서드는 그러한 매개 변수로 호출됩니다. 그러나 실제로 그러한 호출이 정확히 N 번 발생했는지 확인하면 가짜는 모의이라고합니다. 요컨대. 가짜는 Verify()를 호출하지 않으면 스텁이되고 그 다음에 가짜입니다.

분명히, 어떤 경우에는 스텁을 사용하고 다른 경우에는 mock을 사용해야 할 것입니다. 따라서 스텁을 비판하는 것은 틀린 것이며 스텁을 독점적으로 사용하는 것은 잘못된 것입니다.

조롱 프레임 워크 (다른 용어 : 격리 프레임 워크)를 사용하기 시작한 적이 없다면 자주주의 깊게 살펴보고 옵션을 재평가해야합니다. 나는 수동 mock에서 NMock2로 Moq로 빠르게 갔다. 그들이 사용하는 것을 보여주는 흥미로운 poll의 프로그래머가 있습니다. 수동 mock/stubs는 소수에 속하지만 드문 경우는 아닙니다.

+1

유닛 테스트 (좋은 책)와 Moq (좋은 도구)에 대한 +1. – TrueWill

관련 문제