2012-06-21 4 views
0

RhinoMock에서이 코드가 네이티브 실행 SomeVirtualMethod으로 끝나는 이유를 설명해 주실 수 있습니까?RhinoMocks로 메소드 실행을 대체하는 방법

var repository = MockRepository.GenerateStub<MyRepository>(null, null); 
repository.Stub(x => x.SomeVirtualMethod()).Return(new List<SomeObject>()); 

두 번째 줄이 실행되면 원래 SomeVirtualMethod이 실행되고 문맥이 떨어져서 충돌합니다. 나는 또한 시도했다 :

var repository = MockRepository.GenerateStub<MyRepository>(null, null); 
repository.Stub(x => x.SomeVirtualMethod()).Do(new Func<List<SomeObject>>(() => new List<SomeObject>())); 

대체 방법 만 호출되었는지 어떻게 확인할 수 있습니까?

답변

0

스 니펫을 시도했는데 예상되는 빈 콜렉션을 반환하는 데 문제가 없습니다. 내가 사실상 가상이 아니기 때문에 왜 SomeVirtualMethod이 여전히 실행되고 있는지 상상할 수있는 유일한 이유입니다! 제발, 다시 한번 확인해.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Rhino.Mocks; 

namespace TestProject1 
{ 
    [TestClass] 
    public class UnitTest1 
    { 
     [TestMethod] 
     public void TestMethod1() 
     { 
      var stub = MockRepository.GenerateStub<MyRepository>(null,null); 
      stub.Stub(x => x.SomeVirtualMethod()).Return(new List<SomeObject>()); 
      Assert.AreEqual(0, stub.SomeVirtualMethod().Count()); 
     } 
    } 

    public class MyRepository { 

     public MyRepository(object a1, object a2) { } 
     public virtual IEnumerable<SomeObject> SomeVirtualMethod() 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public class SomeObject {} 
} 
:

이것은 내가 노력 코드입니다

관련 문제