2010-06-18 4 views
-1

내 동적 모의 동작은 Parial mock으로 동작합니다. 즉, 호출시 실제 코드를 실행합니다.Rhinomocks DynamicMock 질문

System.NullReferenceException: Object reference not set to an instance of an object. 

at Policy.Entities.MarketingPlan.SetMarketingPlanName(MarketingPlanDescription description) in MarketingPlan.cs: line 76 
at Policy.Entities.MarketingPlan.set_MarketingPlanDescription(MarketingPlanDescription value) in MarketingPlan.cs: line 91 
at Policy.Entities.MarketingPlan.Create(PPOBenefits ppoBenefits, MarketingPlanDescription marketingPlanDescription, MarketingPlanType marketingPlanType) in MarketingPlan.cs: line 23 
at Policy.Entities.BidProposal.CreateMarketingPlan(PPOBenefits ppoBenefits, MarketingPlanDescription marketingPlanDescription, MarketingPlanType marketingPlanType) in BidProposal.cs: line 449 
at Tests.Policy.Services.MarketingPlanCopyServiceTests.can_copy_MarketingPlan_with_all_options() in MarketingPlanCopyServiceTests.cs: line 32 

업데이트 : 여기에 방법이 난 그냥이 방법 CreateMarketingPlan 여기

에서 코드를 실행 내가 무엇을 기대 반환하는

var mockProposal = _mockRepository.DynamicMock<BidProposal>(); 
    SetupResult.For(mockProposal.CreateMarketingPlan(null, null, null)).IgnoreArguments().Repeat.Once().Return(
       copyPlan); 

      //Expect.Call(mockProposal.CreateMarketingPlan(null, null, null)).IgnoreArguments().Repeat.Once().Return(
      // copyPlan); 

      // mockProposal.Expect(x => x.CreateMarketingPlan(null, null, null)).IgnoreArguments().Return(copyPlan).Repeat.Once(); 

대신에 그것을 시도하는 오류가 내가 알아 낸 그게 뭔지. 메서드는 "가상"이 아니므로 비 가상 메서드가 프록시 될 수 없기 때문에 조롱을받을 수 없습니다.

+0

해결책을 게시하고 수락 할 수 있습니까? 이렇게하면 열린 질문이되지 않습니다. –

+0

답변으로 표시해야합니다. – Kehlan

답변

0

내가 무엇인지 알았을 때 원래 질문에 대한 업데이트로 게시 한 답변을 게시하고 있습니다. 메서드는 "가상"이 아니므로 비 가상 메서드가 프록시 될 수 없기 때문에 조롱을받을 수 없습니다.

0

왜 코드를 실행하는 모의가 있습니까? 그것은 모의의 요점입니다. 실제 코드를 조롱하여 테스트에서 기능 영역 1 개에만 집중할 수 있습니다.

업데이트 :

은 어쩌면 내가 오해. 의도하지 않게이 방식으로 작동한다고하면 인터페이스 대신 구체적인 클래스를 사용하기 때문일 수 있습니다.

var mockProposal = _mockRepository.DynamicMock<IBidProposal>(); 
+0

왜? 그 방법에서 무슨 일이 일어나 든 상관하지 않기 때문에, 나는 단지 그것이 한 번 호출된다고 단언하고자합니다. 그 방법을 테스트하지 않고 조롱 한 BidProposal에서 CreateMarketingPlan을 호출하는 다른 메서드를 테스트하고 있습니다. – epitka

+0

내가 읽은 방식대로, 귀하는 귀하가 귀하의 BidProposal 코드에 전화를 걸었다는 것을 의미한다고 생각했는데, 이는 매우 무의미한 것으로 보입니다. 업데이트에서 말했듯이, 귀하가 귀하의 BidProposal을 조롱하고 싶다면, RhinoMock을위한 인터페이스가 조롱받을 수도 있습니다. BidProposal이 IBidProposal 인터페이스를 구현하지 않는 경우, 해당 인터페이스를 사용하십시오 (내 대답의 업데이트에 따라). –

0

코뿔소는 방법을 가상으로 선언하는 경우 구체적인 클래스의 메소드를 조롱 지원과

var mockProposal = _mockRepository.DynamicMock<BidProposal>(); 

교체합니다. 따라서 레코드하려는 메서드에 대한 각 메서드 선언에 virtual 키워드를 추가하여이 문제를 해결할 수 있습니다. Andy_Vulhop이 제안한대로 인터페이스를 추출 할 수도 있습니다.

+0

[원본 포스터 (OP)] (http://meta.stackexchange.com/questions/79804/whats-stackexchange-ese-for-op)는 질문에 대한 업데이트에서 이미 이것을 언급했습니다. –