2014-01-20 1 views
1
interface ITaxi 
{ 
    int Fare { get; set; } 
    int getTotalFare();   
} 


class Taxi : Car, ITaxi 
{ 

    public Taxi(Engine e) : base (e){ }   

    public int Fare { get; set; } 
    public int getTotalFare() 
    { 
     return 0; 
    } 
} 


[TestFixture] 
class TestTaxi 
{ 
    [Test] 
    public void TestTaxiFare() 
    { 
     MockRepository mockRepo = new MockRepository(); 
     ITaxi taxi = mockRepo.Stub<ITaxi>(); 
     using (mockRepo.Record()) 
     { 
      SetupResult.For(taxi.getTotalFare()).Return(400); 
     } 
     Assert.AreEqual(400, taxi.getTotalFare()); 
    } 
} 

Test Driven Development에 처음 오릅니다. 나는 클래스를 조롱하고 메소드의 값을 설정하려고했습니다. 하지만 난Cock에서 조롱 한 오류 반환 값 반환 값 함수의 값

message castle.dynamicProxy.generators.generatorexception Type is not public, so a proxy cannot be generated. type: UnitTest.ITaxi 
  1. 내가 코드에서 아무것도 그리워 했습니까?

  2. 스텁과 모의의 차이점은 무엇입니까? [나는 링크가 이해하지 못함을 읽었다]?

+0

스텁은 계약서에 순응하는 클래스입니다. 즉, 올바른 유형 값을 반환하지만 그게 바로 그 것입니다. 모의 (mock)는 함수를 수행하고 특정 값을 반환하기 위해 "조롱 된"클래스입니다. –

+0

[테스트 더블 즈를 아십시오] (http://googletesting.blogspot.co.uk/2013/07/testing-on-toilet-know-your-test-doubles.html) –

답변

0

다른 사람들이 언급했듯이 인터페이스를 공개로 선언해야합니다.

모의 (mock)와 스텁 (stub)의 차이점은 상당히 미묘합니다 (Roy Osherove의 Art of Unit Testing 책을 이해함에 따라).

  • 스텁은 테스트를 지원하지만 실제 테스트가 테스트중인 클래스에 대해 어설트되므로 테스트를 실패하지 못하는 무언가입니다.
  • 모의은 해당 개체에 대해 어설 션이 수행 될 때 테스트를 실패 할 수 있습니다.

더 자세히 설명하면 스텁은 어설 션을 나중에 수행하는 데 도움이되는 미리 준비된 응답 (즉, 테스트중인 메소드에 대한 매개 변수 일 수 있음)입니다. 스텁이 테스트를 통과했거나 테스트에 실패했다는 것을 결코 주장하지 않을 것입니다. 다른 테스트를 돕기 위해 구성한 객체 일 때

예를 들어,이 객체를 매개 변수 집합으로 구성한 경우 나는 무엇을 기대합니까? 내부 상태 (예상대로)가 바뀌거나 예외 (예기치)가 발생합니까? 이것은 당신이 테스트하고자하는 주장입니다.

더 복잡한 테스트에서는 많은 스텁이있을 수 있지만 겨우 하나의 모의만을 목표로해야합니다.

+0

여전히 나는 차이를 얻지 못했습니다. – Dineshkumar

+0

@Dineshkumar 좀 더 많은 정보를 추가했습니다. 도움이됩니까? – Damon

+0

내가 사용해야하는 수업을 말할 때? generateMock 또는 generateStub ? – Dineshkumar

2

당신은 코뿔소 모의 객체에 대한 인터페이스 public를 선언해야 모의 생성 할 수 있도록 :에 의해 공공

public class Taxi : Car, ITaxi 

interface ITaxi 

-Access Modifiers in C#

+0

공개해야하는 이유는 무엇입니까? – Dineshkumar

0

변화 클래스를

public interface ITaxi 
{ 
    int Fare { get; set; } 
    int getTotalFare();   
} 

참조 기본값은 공개되지 않습니다.