2011-01-26 53 views
9

起订量属性我想MOQ下一个对象:与保护的setter

abstract class Foo 
{ 
    public string Bar { get; protected set; } 
} 

使new Mock<Foo>().Bar回报"Blah"

我该怎么做?


fooMock.SetupGet<string>(s => s.Bar).Returns("Blah"); 

抛出

故障:System.NotSupportedException:一个非虚拟部件上无效设置:S => s.Date

fooMock.Protected().SetupGet<string>("Bar").Returns("Blah"); 

投掷

要指定公物StatementSection.Date的设置,使用类型重载

回答

7

因为嘲讽是通过创建类的代理,只虚函数来完成/属性可以是“moqued”

+0

那么如何行动?使用反射调用属性setter?修改属性使虚拟? – abatishchev 2011-01-26 17:01:09

7

和Felice(+1)一样,嘲讽创建了一个代理,这意味着您需要让事物变得虚拟(因此Moq可以使用它的代理魔法并覆盖属性)。

至于如果你只是想在一个值唧您可以手动存根要测试和暴露的手段来获得在二传手类的一种替代方案: -

public class FooStub : Foo { 
    public SetBar(string newValue) { 
     Bar = newValue; 
    } 
}