Moq свойство с защищенным сеттером - PullRequest
10 голосов
/ 26 января 2011

Я хочу Moq следующий объект:

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

, чтобы new Mock<Foo>().Bar return "Blah".

Как я могу это сделать?


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

throws

Сбой: System.NotSupportedException: неверная настройка для не виртуального члена: s => s.Date

и

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

throws

Чтобы указать настройку для открытого свойства StatementSection.Date, используйте типизированные перегрузки

Ответы [ 2 ]

9 голосов
/ 26 января 2011

Как и Феличе (+1), упомянутое издевательство создает прокси, что означает, что вам нужно либо сделать вещи виртуальными (чтобы Moq мог использовать магию проксирования и переопределить свойство).Чтобы ввести значение, вы можете вручную указать класс, который вы хотите проверить, и предоставить средства, которые можно получить в установщике: -

public class FooStub : Foo {
    public SetBar(string newValue) {
       Bar = newValue;
    }
}
8 голосов
/ 26 января 2011

Поскольку макетирование выполняется путем создания прокси вашего класса, только виртуальная функция / свойство может быть "moqued"

...