c# - Rhino Mocks DynamicMultiMock - 在附加接口(interface)上设置期望值和返回值

标签 c# .net unit-testing rhino-mocks

我正在创建一个 DynamicMultiMock,如下所示:

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

然后设置以下期望:

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

当我执行测试时,Rhino 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();

谢谢

安德烈

最佳答案

如果不查看您的生产代码,真的很难判断出了什么问题。以下测试通过:

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 工作正常。您确定您不会多次调用 State 吗?尝试将您的模拟更改为 StrictMocks(当不期望调用时您将得到一个异常),因此:

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

并让该属性被多次读取:

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

让我知道你的进展情况。

关于c# - Rhino Mocks DynamicMultiMock - 在附加接口(interface)上设置期望值和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426786/

相关文章:

c# - 垃圾收集和控件已订阅其事件的局部变量

javascript - 如何从asp.net c#中选定的日期获取上个月的日期

c# - 将日期插入到 oracle

.net - EF Code First - 删除迁移文件

c# - DependencyProperty 绑定(bind)问题

java - 当调用 void 方法时,如何使用 PowerMock/PowerMockito/Mockito 抛出异常?

c# - ASP.NET 反序列化 JSON 返回 Null

.net - 当前的 .NET SDK 不支持面向 .NET Core 2.1。面向 .NET Core 2.0 或更低版本,或者使用支持 .NET Core 2.1 的 .NET SDK

django - 在 Django 中测试 admin.ModelAdmin

java - 如何在不定义 equals() 和 hashCode() 的情况下比较自定义类列表?