2010-03-11 71 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