【问题标题】:How to mock a property with no setter?如何模拟没有设置器的属性?
【发布时间】:2011-12-11 02:55:12
【问题描述】:

我正在尝试模拟一个界面。我要设置“MockThisProperty”的属性没有设置器。我无法更改接口源。我得到的错误是

上一个方法'IThirdPartyInterface.get_MockThisProperty();'需要返回值或抛出异常。

我尝试过 DynamicMock、Strictmock、部分模拟等。

当我尝试 SetupResult.For(thirdParty.MockThisProperty = mockedValue) 时不会编译,因为没有设置器。

在 mstest 中使用最新的 Rhino 模拟

不知所措,这里是代码...

        var stuff = _Mockery.Stub<Hashtable>();
        matchItem.Add(key, "Test"); 

        var thirdParty = _Mockery.Stub<IThirdPartyInterface>();
        SetupResult.For(thirdParty.MockThisProperty).Return(stuff);

        _Mockery.BackToRecordAll();


       //more code

        _Mockery.ReplayAll();

        Assert.IsTrue(MethodToTest(thirdParty));

        _Mockery.VerifyAll();

【问题讨论】:

  • Moq 处理仅获取属性。只是说...

标签: c# unit-testing rhino-mocks


【解决方案1】:

这对我有用:

var thirdParty = Rhino.Mocks.MockRepository.GenerateStub<IThirdPartyInterface>();
thirdParty.Stub(x => x.MockThisProperty).Return("bar");
string mockPropertyValue = thirdParty.MockThisProperty; //returns "bar"

【讨论】:

  • 行得通。如果我像上面那样使用 _Mockery = new MockRepository() _Mockery.Stub() 那么它会引发异常。有人知道为什么吗?
  • 实例化 mockrepository 更像是一种设置 mock 和 stub 的旧方法,并且需要花费大量精力来管理记录和回放等。使用静态方法是更新、首选、更加自动化和可预测的方法。用旧的处理方式可能会得到一些意想不到的结果。
【解决方案2】:

我在尝试模拟在没有设置器的接口中定义的属性时偶然发现了这篇文章。

由于我还没有使用 Rhino 并且不想要 Moq 以外的其他依赖项,所以我发现

mockedWithMoq.SetupGet(x =&gt; x.PropertyWithGetterOnly).Returns("foo")

也会做这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多