如何模拟没有setter的属性?

4

我正在尝试模拟一个接口。我想设置的属性 "MockThisProperty" 没有setter。我无法更改接口源代码。我得到的错误是:

"IThirdPartyInterface.get_MockThisProperty();" 方法需要返回值或抛出异常。

我尝试使用 DynamicMock、Strictmock、partial mock 等方法。

当我尝试使用 SetupResult.For(thirdParty.MockThisProperty = mockedValue) 时,因为没有 setter 而无法编译。

我正在使用最新的 Rhino Mocks 和 MSTest。

现在很困惑,请看以下代码...

        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(http://code.google.com/p/moq/)处理只读属性。只是这么说... - TrueWill
2个回答

7
这对我有用:

这适用于我:

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<>(),它就会抛出异常。有人知道为什么吗? - Alex
实例化MockRepository是一种旧的设置模拟和存根的方式,需要大量的管理记录和回放等工作。使用静态方法是更新、更受欢迎、更自动化和可预测的方式。使用旧的处理方式可能会得到一些意外的结果。 - Dave Rael

0
当我尝试模拟一个在接口中定义但没有setter的属性时,我偶然发现了这篇文章。
由于我还没有使用Rhino,也不想增加除Moq之外的依赖项,所以我找到了以下代码:
mockedWithMoq.SetupGet(x => x.PropertyWithGetterOnly).Returns("foo")
它也可以完成工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接