2011-10-06 70 views
1

試圖用RhinoMock模擬一個功能。犀牛模擬調用被嘲笑的功能

var repository = new Rhino.Mocks.MockRepository(); 
var classMock = repository.DynamicMock<Customer>(); 
Expect.Call(classMock.getCustomerAge("john")).Return(12); 

問題是,在Expect.Call行它實際上調用它應該模擬的函數。難道我做錯了什麼?嘲笑的目的不是你不必運行實際的功能?

public class AgeProvider 
{ 
    private static Service _Service; 
    private static string _User; 

    public AgeProvider() 
    { 
    } 

    public AgeProvider(ISession session, string authenticatedUser) 
    { 
     _Service = new Service(session); 
     _user = authenticatedUser; 
    } 

    public int getCustomerAge(string userToSearch) 
    { 
     var user = _Service.FindUser(_user, userToSearch); 

     return user.age; 
    } 

} 

簡化了類,其中函數是我試圖模擬的。

回答

4

是虛擬的方法嗎?我認爲如果你嘲笑一個類而不是一個接口,你也需要使用部分模擬。

+0

不可以,沒有做到這一點,它仍然調用該函數。 – TuomasK

+0

你可以用客戶類的定義更新問題嗎? –

+0

爲問題添加了簡化類。 – TuomasK

2

這可能是因爲您正在使用較舊的記錄/重放語義。相反,使用新的AAA(Arrange/Act/Assert)風格:

classMock.Stub(r => r.getCustomerAge("john")).Return(12); 
+0

不行不行。它仍然調用該函數。 – TuomasK

+0

雖然我認爲使用新風格的建議是一個很好的建議,但我不認爲語義應該有所作爲,您應該能夠以任何方式模擬虛擬調用,使用新的或舊的風格 –