2013-06-20 44 views
1

我有一個服務功能,它需要運行的步驟。我有很多嘗試與犀牛嘲笑,但沒有運氣。我無法通過測試。如何測試服務功能需要運行的步驟?

所以問題是什麼是測試這個最好的方法?代碼重構是否需要?

任何幫助表示讚賞。非常感謝。

public class Service : IService 
{ 
    public void Initialize() 
    { 
     Function1(); 
     Function1(); 
     Function1(); 
    } 

    public void Function1() {} 
    public void Function2() {} 
    public void Function3() {} 

} 

public interface IService 
{ 
    void Initialize(); 
    void Function1(); 
    void Function2(); 
    void Function3(); 
} 

[Test] 
public void Test1 
{ 
    var mockService = MockRepository.GenerateMock<OfficePrinterService>(); 

    mockService.Initialize(); 

    // Test will Error Here. 
    // No expectations were setup to be verified, ensure that the method call in the action is a virtual (C#)/overridable (VB.Net) method call 
    mockService.AssertWasCalled(x=>x.Function1()); 
    mockService.AssertWasCalled(x=>x.Function2()); 
    mockService.AssertWasCalled(x=>x.Function3()); 
} 

[Test] 
public void Test2 
{ 
    var mockService = MockRepository.GenerateMock<IOfficePrinterService>(); 

    mockService.Initialize(); 

    // Test will Error Here. 
    // Rhino.Mocks.Exceptions.ExpectationViolationException : IService.Function1(); Expected #1, Actual #0. 
    mockService.AssertWasCalled(x=>x.Function1()); 
    mockService.AssertWasCalled(x=>x.Function2()); 
    mockService.AssertWasCalled(x=>x.Function3()); 
} 

回答

0

您無法將測試對象,這是Service上設置的期望。這不是一個模擬。它是正在測試的系統。你應該斷言你的Function方法的可觀測行爲而不是任何嘲弄(如 - 當Initialize調用Initialize時消費者期望發生什麼0123??它在內部調用的內容是無關緊要的 - 消費者不需要知道這一點,他對最終結果感興趣)。

+0

感謝您的回覆,我想可能是這種情況。對我來說唯一的困難將是如何測試正確的事件處理程序已被註冊。 –

相關問題