2010-03-11 22 views
2

我創建一個DynamicMultiMock如下設置與返回值的預期:犀牛製品DynamicMultiMock - 額外接口

this.serviceClient = this.mocks.DynamicMultiMock<ISlippyPlateProcedureService>(typeof(ICommunicationObject)); 

然後設置以下期待:

Expect.Call(((ICommunicationObject)this.serviceClient).State).Return(CommunicationState.Faulted); 

當我執行測試,犀牛Mocks報告如下:
重播預期:ICommunicationObject.get_State();
動態模擬:意外的方法調用忽略:ICommunicationObject.get_State();

我是否正確地設定了這個期望值還是有另一種方法?

編輯,包括完整的測試代碼:

 Expect.Call(this.syncContextContainer.SynchronizationContext).Return(new SlippyPlateProcedureSynchronizationContextMock()); 
     Expect.Call(this.clientFactory.CreateServiceClient(null)).IgnoreArguments().Return(this.serviceClient); 
     Expect.Call(((ICommunicationObject)this.serviceClient).State).Return(CommunicationState.Faulted); 
     Expect.Call(() => this.serviceClient.IsAlive()); 
     this.mocks.ReplayAll(); 
     SlippyPlateProcedureClient client = new SlippyPlateProcedureClient(
      this.syncContextContainer, this.clientFactory, this.container); 
     PrivateObject privateObject = new PrivateObject(client); 
     SlippyPlateProcedureClient_Accessor target = new SlippyPlateProcedureClient_Accessor(privateObject); 

     target.CheckServerConnectivity(); 

     this.mocks.VerifyAll(); 

感謝

安德烈

+0

你可以粘貼整個測試嗎?乍一看,這條線看起來是正確的... – Grzenio 2010-03-11 16:41:45

回答

2

它真的很難說了什麼錯誤,沒有看到你的產品代碼。以下測試通過:

public interface IA 
    { 
     int A(int a); 
    } 

    public interface IB 
    { 
     int B(int b); 
    } 

    [Test] 
    public void Multimocks() 
    { 
     MockRepository mocks = new MockRepository(); 
     IA mymock = mocks.DynamicMultiMock<IA>(typeof (IB)); 
     Expect.Call(mymock.A(1)).Return(2); 
     Expect.Call(((IB)mymock).B(3)).Return(4); 
     mocks.ReplayAll(); 

     Assert.AreEqual(2, mymock.A(1)); 
     Assert.AreEqual(4, ((IB)mymock).B(3)); 
    } 

這意味着multimocks正常工作。你確定你不是多次打電話給國家嗎?試着改變你的嘲弄來StrictMocks(你會得到一個異常預期不會調用時),所以:

this.serviceClient = this.mocks.StrictMultiMock<ISlippyPlateProcedureService>(typeof(ICommunicationObject)); 

,讓物業多次讀取:

Expect.Call(((ICommunicationObject)this.serviceClient).State).Return(CommunicationState.Faulted).Repeat.Any(); 

讓我知道你是什麼進展。

+0

嗨,我不在做其他工作,今天又回到了這個問題。你是對的,multimocks的作品,國家被稱爲不止一次。謝謝! – Andrey 2010-03-17 15:44:47