2009-09-14 2 views

답변

80

글쎄 당신은 당신이 밖으로 정렬해야 할 몇 가지 있습니다. Nomenclature와 Best Practices라는 두 가지 기본 지식을 알아야합니다.

먼저 내가 당신에게 좋은 테스터에서 멋진 동영상 리소스를주고 싶어, 로이 Osherove : 로이 Osherove에 의해

단위 테스트 리뷰

그는 완료 을 가지고 말에 의해 시작 테스트 하니스의 일부 리뷰 은 여러 오픈 소스 프로젝트와 함께 제공됩니다. 당신은 여기 찾을 수 있습니다 http://weblogs.asp.net/rosherove/archive/tags/TestReview/default.aspx

이 그가이 시험 하네스를 안내하고 좋은 것과 나쁜 것을 알려줍니다 는 기본적으로 비디오 리뷰입니다. 매우 도움이됩니다.

로이도 내가 이해하는 책이 있습니다. 은 매우 좋습니다. (즉 Hanselminutes 소개 음악이 무서운 입니다)하지만 나는, 팟 캐스트 의역 것이다 http://www.hanselminutes.com/default.aspx?showID=187

: 명칭

이 팟 캐스트는 대단히 을 도움이 될 것입니다

기본적으로 everyt격리 프레임 워크 (Moq, Rhino Mocks, Mock 등)은 가짜이라고합니다.

가짜

는 당신이 을 테스트하는 코드가 생산 코드 대신에 호출 할 수있는 테스트 동안 사용하는 오브젝트입니다. 가짜는 코드가 응용 프로그램 의 다른 부분에서 테스트하려고 시도하는 코드를 분리하는 데 사용됩니다.

이 있습니다 (주로) 가짜의 두 가지 유형 : 스텁을 조롱.

모의

는 을 테스트하는 코드가를 호출 할 수 있으며,이 통화가 올바른 매개 변수를 사용하여 만들어 졌다고 주장 있도록 장소에 배치하는 가짜입니다. 당신은 당신이 테스트 있는지 코드를 만들기 위해 장소 에 넣어 것을 제외하고

[TestMethod] 
public void CalculateTax_ValidTaxRate_DALCallIsCorrect() 
{ 
    //Arrange 
    Mock<ITaxRateDataAccess> taxDALMock = new Mock<ITaxRateDataAccess>(); 
    taxDALMock.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001")) 
        .Returns(0.08).Verifiable(); 

    TaxCalculator calc = new TaxCalculator(taxDALMock.Object); 

    //Act 
    decimal result = calc.CalculateTax("75001", 100.00); 

    //Assert 
    taxDALMock.VerifyAll(); 
} 

스텁가하는 모의와 거의 동일합니다 : 아래의 샘플은 이것을 MOQ 격리를 사용 프레임 워크 않습니다 은 호출에서 일관된 데이터를 가져옵니다. 예를 들어 코드에서 데이터 액세스 레이어를 호출하면 스텁이 가짜 데이터를 반환하지만 스텁 그 자체에 대해 을 지정하지 않아도됩니다. 그 은 메서드가 위조 데이터 액세스 레이어를 호출했는지 확인하지 않아도됩니다. 다른 것을 테스트하려고합니다. 스터브 을 제공하여 테스트를 단독으로 수행하려고 시도하는 방법을 얻습니다. 우리가 오히려 방법은 다른 리소스에 전화를했다하는 사실보다, 방법의 출력을 테스트하는 것을 여기

[TestMethod] 
public void CalculateTax_ValidTaxRate_TaxValueIsCorrect() 
{  
    //Arrange 
    Mock<ITaxRateDataAccess> taxDALStub = new Mock<ITaxRateDataAccess>(); 
    taxDALStub.Setup(taxDAL => taxDAL.GetTaxRateForZipCode("75001")) 
        .Returns(0.08); 

    TaxCalculator calc = new TaxCalculator(taxDALStub.Object); 

    //Act 
    decimal result = calc.CalculateTax("75001", 100.00); 

    //Assert 
    Assert.AreEqual(result, 8.00); 
} 

주의 사항 :

는 여기 스텁 예입니다.

MOQ 정말 모의와 스텁 사이의 API 구분을 (모두 Mock<T>로 선언 된 알),하지만 여기에 사용이 유형을 결정하는 중요한 하지 않습니다.

희망 사항은 바로 설정하는 데 도움이됩니다.

+8

Ayende (Rhino Mocks 제작자)는 최근 Mock vs Stub을 버리고 다음 버전의 Rhino Mocks에서 모든 것을 가짜로 만들 것이라고 발표했습니다. 어떤 사람들은 모의가 아니라 스텁이라는 지식을 더 많이 습득한다고 주장 할 것입니다. 걱정하지 않는다면, 항상 모의 (mock)를 사용하고 그들의 가정을 주장하지 마십시오. 그것은 당신에게 어느 것을 사용해야하는지 알아야하는 것에 대한 두통을 덜어 줄 것입니다. –

+0

아주 좋은 설명 앤더슨. 나는 가짜 또는 가짜에 익숙하지 않지만 조롱과 스텁에 익숙합니다. 가짜 명명법은 어디서 오는가? –

+1

@Anderson Imes 미안하지만 나는 더 명백하지 않았습니다. 나는 당신의 묘사를 이해하며 그것은 아주 충분합니다. 제 말은 "가짜"라는 명칭을 가진 사람이 누구인지 생각해냅니다. 나는 전에이 컨텍스트에서 언급 한 것을 보지 못했고 내가 읽은 모든 것은 항상 Mock vs Stubs였습니다. Ayende의 블로그에도 가입했지만, 같은 문장에서 Mock/Stubs와 Fakes에 대해 언급 한 적이 한번도 없습니다. –

1

코드 덩어리를 테스트하고 싶습니다. 그렇습니다. 메서드는 http url에서 파일을 다운로드 한 다음 디스크에 파일을 저장 한 다음 파일이 디스크에 있음을 알립니다. 이 모든 세 가지 행동은 당연히 모의하기가 쉽기 때문에 메서드가 호출하는 서비스 클래스입니다. 이들을 조롱하지 않으면 테스트가 실행될 때마다 테스트가 실행되며 디스크에 액세스하고 메시지를 메일로 보냅니다. 그런 다음 메서드에서 코드를 테스트하는 것이 아니라 다운로드하고 디스크에 쓰고 메일을 보내는 코드를 테스트하는 것입니다. 이제 이들을 조롱하는 경우 메서드 코드 만 테스트하고 있습니다. 또한 예를 들어 다운로드 실패를 시뮬레이트하여 메소드의 코드가 올바르게 작동하는지 확인할 수 있습니다.

위조와 관련하여, 나는 보통 가치를 지닌 클래스를 가짜로 삼았으며 논리가 많지 않습니다. 메소드에서 변경된 일부 값을 보유하는 객체를 전송하는 경우 테스트에서 해당 값을 읽으면 메소드가 올바른 일을하는지 확인할 수 있습니다.

물론 규칙은 약간 구부러 질 수 있지만 때로는 일반적인 사고 방식은 코드와 코드 만 테스트하는 것입니다.

1

The Little Mocker으로 분류되어 있습니다.

[...] 오래 전 매우 똑똑한 사람들은 모의 객체라는 용어를 도입하고 정의한 논문을 저술했습니다. 많은 다른 사람들이 그것을 읽고 그 용어를 사용하기 시작했습니다. 논문을 읽지 않은 다른 사람들은 용어의 뜻을 듣고 폭 넓은 의미로 사용하기 시작했습니다. 그들은 심지어 그 단어를 동사로 바꾸었다.그들은 "그 물건을 조롱하자", 또는 "우리는 할 일이 많이있다"고 말할 것입니다.

이 기사에서는 mock, fake, spys 및 stub 간의 차이점에 대해 설명합니다.

관련 문제