2012-06-21 38 views
0

任何人都可以請解釋爲什麼在RhinoMocks中該代碼仍然以執行原生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 {} 
}