문제

면 나는 원래 도입되었을 조롱하는 주된 목적은 조롱하는 개체 오 외부 소스에서의 데이터입니다.이 방법을 가지고 있지 않았을 유지하는 자동화한 단위 테스트 테스트 데이터베이스,나는 그냥 그것은 가짜.

하지만 지금은 내가 생각하기 시작하의하게 됩니다.나를 조롱하는 경우는 더 효과적인 사용을 완전히 분리 테스트 방법은 아무것도에서 외부의 자체입니다.이미지를 유지하는 오는 마음을 배경으로 사용할 경우 그림입니다.당신이 원하는 페인트를 유지하기 위해서 얻는 모든 모든 것입니다.이 테스트 방법,그리고 나는 단지 알고 싶어 어떻게 반응하여 이러한 위장한 외부 요인입니까?

그것은 보인다 매우 지루한 이 방법을 사용 하는 장점이 나가 보고 있는 테스트가 실패하면 그것 때문에 그것은 망하지 않 16 층니다.그러나 지금 있어야겠다고 생각했어요 16 을 테스트하는 동일한 테스트 범위기 때문에 각 부분 테스트에서 격리됩니다.플러스 테스트는 더 복잡하고 더 깊이 연결 방법을 시험하고 있다.

그것은 바로 느낌이지만 내게도 보이 잔인한다 그래서 나의 종류를 알고 싶은 다른 사람이 무엇을 생각합니다.

도움이 되었습니까?

해결책

추천을 살펴 Martin Fowler 의 문서 Mocks 지 않 스텁 에 대한 더 많은 신뢰할 수 있는 치료의 조롱하보다 내가 당신을 줄 수 있습니다.

의 목적은 조롱하는 것입 단위 코드를 테스트에 고립의 종속성할 수 있도록 진정으로 테스트하는 코드에서"단위"수준입니다.테스트 코드를 실제 거래,모든 다른 코드에 의존(를 통해 매개변수를 종속 사출 등)은"모"(빈 구현는 항상환이 예상 값을 때 해당 메서드가 호출됩니다.)

Mocks 지루한 것처럼 보일 수 있지만,그들은 단위 테스트 훨씬 더 쉽고 강력한 일단 당신이 당신의 그들을 사용하고 있습니다.대부분의 언어 있는 모의 라이브러리에는 롱 비교적 간단하다.를 사용하는 경우 Java,내가 추천한 내 개인 즐겨 찾기: EasyMock.

Let me finish 이와 함께 생각:당신이 필요 통합 테스트를 너무나 좋은 볼륨의 단위 테스트를 찾을 수 있는 구성 요소를 포함,버그 때 하나는 존재합니다.

다른 팁

지 아래로 이동 어두운 길을 마스터 누가복음.:)지 않는 모의 모든 것입니다.할 수 있지만...여기에는 이유입니다.

  • 계속할 경우를 테스트하고 각 방법에서 분리,당신은 놀라움과 작품에 대한 할 때 당신이 그들을 모두 함께 ala 빅뱅.우리가 만드는 개체는 작업할 수 있도록 해결하기 위해 함께 더 큰 문제가 발생할 수 있다.자신에 의해 그들은하지 않습니다.당신 는 경우 알아야 할 모든 공동 작업자가 예상대로 작동하는.
  • Mocks 을 취성 테스트 을 도입하여 중복-예 나는 소리 놀라운 것입니다.모든 모의 기대를 설치가 있는 장소는 당신의 방법을 서명이 존재합니다.실제 코드와 모의 기대(에서 여러 테스트).변화에 실제 코드는 쉽게...업데이트하는 모든 모형의 기대치를 충족시키는 것은 지루한 수 있습니다.
  • 귀하의 이제 테스트가 관여 내부 정보 구현.그래서 당신의 테스트 방법에 따라 달라집을 선택한 솔루션을 구현하...나쁘다.테스트는 독립적 사양을 충족할 수 있습니다.나는 자유가 있을 누르면 삭제 코드 블록과를 구현 을 다시 작성 테스트..촌 요구 사항에도 동일합니다.

기까지 말할 것이다"만약 그것이 돌팔이 의사처럼 오리,산책 오리처럼,그것은 아마도"오리-면 그것은 잘못된 느낌..그것은 아마이다.*사용하여 조롱을 추상화하는 문제 같은 아이들 IO 작업,데이터베이스의 세 번째 파티를 구성 요소와 같은..소금처럼,그것의 일부를 필요..너무 많:x*
이것은 거룩한 전쟁의 상태 기반 vs 될 상관 기반 시험..인터넷 검색을 줄 것이다 당신은 깊은 통찰력.

설명:나는 일부를 타격 저항이다.r.t.통합 테스트를 여기에)그래서 명확하게 내 서..

  • 를 조롱하지 않는 그림에서의 수용 테스트를'/합니다.당신은 단지 그들을 찾을 단위로 테스트됩니다.고하는 내 여기에 초점.
  • 승인 테스트는 서로 다른와는 아주 많 필요하지 않 비니다.하지만 단위 테스트 및 승인 테스트는 서로 다른 유지되어야 한다 다릅니다.
  • 모든 공동 작업자에서 구성 요소 또는 패키지 할 필요가 없습에서 고립니다.다음과 같 마이크로 최적화하는 것입니다.그들은 존재 문제를 해결하 함께..응집.

예,동의합니다.나는 조롱으로 때때로 고통스러운,그러나 자주 필요한 테스트를 위한 진정으로 된 단위 테스트,즉만 가장 작은 유닛을 만들 수 있는 테스트와 함께 걱정은 아래에서 테스트입니다.이것은 당신을 제거하는 다른 요인인할 수 있는 잠재적 영향을 줄 테스트의 결과입니다.결국 할 더 많은 작은 테스트,하지만 그것은 너무 쉽게 작동하는 문제입니다 당신의 코드입니다.

나의 철학은 당신이 작성해야 가능한 코드에 맞게 테스트
지 않은 테스트를 작성하여 적합니다.

으로 복잡성,내 의견은 테스트를 간단해야를 쓰기 때문에,단순히 당신이 더 테스트를 작성하는 경우 그들이 있습니다.

수도 동의할 수 있는 좋은 생각하는 경우 클래스는 당신이 조롱 없는 테스트이기 때문에,그들이 한 경우에 적절한 테스트,당신이 알고 있는 문제는 없이 격리입니다.

그들 대부분은 시간이었을 사용한 모의 개체 코드가 나에 대한 테스트를 작성은 이렇게 단단히 결합되는(읽기:나쁜 디자인),내가 쓰는 모의 개체 클래스에 따라 그들은 사용할 수 없습니다.은 유효한 사용에 대한 조롱하지만,경우에는 코드 그들의 사용,나는 또 다른 모습을 디자인합니다.

네,단점은 테스트와 조롱.의 많은 작품을 넣어야에서 느끼는 잔인하다.그러나 그것은 본질의 단위 테스트입니다.할 수 있는 방법 당신 테스트에서 뭔가를 격리하지 않는 경우는 모의 외부 자원?

다른 한편으로는,당신은 조롱하다 느린 기능을(및 데이터베이스와 같은 i/o operations).는 경우 테스트를 실행한 다음 빠르게 유지하는 프로그래머는 행복합니다.많은 아무것도 없보다 더 고통스러운 기다리고 정말로 느린 테스트는 10 초 이상 걸릴 마무리를 실행하는 동안,당신을 구현하기 위해 노력하고 하나의 기능입니다.

는 경우 모든 개발자는 프로젝트에서 시간을 보냈 쓰는 단위 테스트,그 16 층(간접)지 않는 문제입니다.희망이 있어야 합 테스트하는 범위에서 시작,right?:)

또한,를 작성하는 것을 잊지 마세요 기능/통합 테스트체 사이에서 공동 작업입니다.또는 다른 당신이 놓칠 수 있습니다.이 테스트는 필요하지 않습을 자주 실행되지만,여전히 중요합니다.

에서 하나의 스케일,그렇다,조롱하는 것을 시뮬레이션하는 데 사용되는 외부 데이터와 같은 소스 데이터베이스 웹 서비스입니다.더 정밀하게 세분화된 스케일 그러나 만약 당신이 설계하게 결합되는 코드는 다음해서 그리듯이 값을 지정할 수 있습을 통해 코드는 거의 임의적으로 무엇으로도 어떤 시점에서 수 있는'외부 시스템'.프로젝트를 수행에서 일하고 있어요 현재:

려고 하는 경우에 확인하고, CheckInUiCheckInInfo 객체 CheckInMediator 개체의 유효성을 검사하고 그것을 사용하여 CheckInValidator, 다음 경우,그것은 확인,그것을 채운 도메인이라는 개체 트랜잭션CheckInInfoCheckInInfoAdapter 그런 다음 전달 트랜잭션 하의 인스턴스 ITransactionDao.SaveTransaction() 에 대한 지속성을 알려준다.

나는 지금은 쓰고 일부 자동화 통합 테스트 고 분명 CheckInUiITransactionDao windows 에게 외부 시스템과 그들은 해야 하는 조롱하고 있습니다.그러나 그의 말에서 어떤 시점 CheckInValidator 지를 호출하는 웹 서비스입니까?는 이유를 작성할 때 단위 테스트 당신다고 가정한 모든 것 이외의 특정 기능의 클래스에는 외부 시스템입니다.따라서서 단위의 테스트 CheckInMediator 나는 모의 모든 물체는 그 회담이다.

편집: Gishu 은 기술적으로 정확한지,모든 것을 요구하는 조롱,지 않아요 예를 들어 모의 CheckInInfo 때문에 그것은 단순히 컨테이너를 위한 데이터이다.그러나 아무것도는 당신이 이제까지 볼 수 있습으로 외부 서비스(그리고 그것은 거의 모든 것을 변환하는 데이터 또는 부작용)해야한 조롱하고 있습니다.

비유는 다음과 같은지를 생각해 제대로 느슨하게 결합된 디자인으로 이 분야와 함께 사람들 주위에 서 있는 그것의 게임을 잡을 수 있습니다.누군가가 전달된 공는 경우에도 완전히 다른 공 다음 사람,그가 수도 있습니를 던지 여러 개의 공 속을 다른 사람이나 공을 던지고 기다려 그것을 받은 뒤로 던지기 전에 그것은 또 다른 사람입니다.그것은 이상한 게임이다.

지금은 그들의 감독 및 관리자,당신은 당신의 과정을 확인하려면 어떻게 귀하의 팀은 전체적으로 그래서 당신은 팀은 연습(통합 테스트)그러나 당신은 또한 각 플레이어 연습에 자신의에 대하여 백네트와 공 투구 기계(단위 테스트롱).유일한 조각이 그림의 누락은 모의 기대하고 그래서 우리는 우리의 공으로 얼룩져 검 tar 그래서 그들은 얼룩 백업할 때입니다.각 백네트는'대상 영역을'하는 사람이 목표로 하는 경우의 끝에서 실행 하는 방법은 없는 블랙 마크는 대상 영역 내에서 당신이 알고있는 무언가 잘못되고 필요로 하는 사람이 자신의 기술을 조정합니다.

정말 시간을 가지고 그것을 배우로,하루는 내가 이해를 조롱했다 거대한 a-ha 순간입니다.결합으로 반전의 제어 컨테이너 및 내가 결코 돌아가고 있다.

에서 참고,하나의 그것을 사람들은 그냥 와서 내게 무료 노트북!

누군가가 말했듯하기 전에는 경우,당신은 모의 모든 것을 분리보다 더 세분화된 클래스를 테스트하는,당신은 줄을 적용하는 응집력에서 당신은 코드 아래에 있는 테스트입니다.

유지 하는 마음에 조롱하고 있는 근본적인 이용,동작 확인.이것은 무언가 명세서를 제공하지 않고 다른 이유는 테스트는 더 과민한(하지만 향상시킬 수 있는 코드 검사).

Mocks 발명되었 부분에서 질문에 대답:어떻게 당신은 유닛 테스트 객체는 경우 그들이 필요한 것입 또는 setter?

이러한 일 추천 연습은 모의 역할을합니다.사용 조롱으로 디자인하는 도구에 대해 이야기한 협업과 분리의 책임,그리고"스마트 스텁".

모의 개체는 1)자주 사용하는 수단으로 격리하는 코드는 아래에서 테스트,하지만 2)keithb 이미 지적,중요한을"에 초점 간의 관계를 협력체".이 문서에서 어떤 통찰력과 역사와 관련된 주제: 책임 중심의 디자인으로 모의체.

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