2011-09-02 83 views
1

我寫這樣的類:RhinoMock說:「類型不匹配的返回類型」

public class A 
{ 
    public virtual int LowLimit { get; set; } 

    internal virtual bool CheckLimit(int measurement) 
    { 
     return LowLimit <= measurement; 
    } 
} 

併爲它的測試:

MockRepository mocks = new MockRepository(); 
var limit = mocks.StrictMock<A>(); 

Expect.Call(limit.CheckLimit(2)).Return(true).Repeat.Once(); 
mocks.ReplayAll(); 
limit.CheckLimit(2); 
mocks.VerifyAll(); 

它失敗: 系統.InvalidOperationException:類型'System.Boolean'與方法'A.get_LowLimit();'的返回類型'System.Int32'不匹配

但是,當我將CheckLimit方法的內部關鍵字替換爲public時,它工作正常。 爲什麼它會這樣呢?

回答

3

如果您使用外部庫(StrictMock),那麼它無法訪問任何內部方法。

它看起來像StrictMock實現正試圖用A的CheckLimit,而是因爲它無法找到一個實現可能使用它自己的實現它採用的LowLimit時

+0

奇怪。如果它不能訪問CheckLimit,它是如何知道CheckLimit在裏面使用LowLimit的?什麼是解決方案?我需要有內部的關鍵作品:( – Archeg

+0

啊,無論如何,我得到它,所以謝謝。我已經添加[彙編:InternalsVisibleTo(Rhino.Mocks.RhinoMocks.NormalName)]我的保證,它的工作。謝謝 – Archeg