Настройка непубличных свойств с использованием функционального синтаксиса Moq - PullRequest
0 голосов
/ 25 октября 2011

Кто-нибудь знает, поддерживает ли функциональный синтаксис Moq настройки для непубличных свойств? Я заметил, что это не работает.

ПРИМЕЧАНИЕ. Это для функционального синтаксиса.

public class Foo
{
    public virtual int FooProperty { get; protected set; }
}

Это не выдает ошибку, но не может издеваться над FooProperty

Mock.Of<Foo>(x => x.FooProperty == 1);

Обычный синтаксис работает нормально.

var mockFoo = new Mock<Foo>(); mockFoo.SetupGet(x=>x.FooProperty)
    .Returns(1)

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Возможно, стоит взглянуть на инструмент Pex / Moles от Microsoft Research. Кроты используются для создания аксессуаров для непубличных вещей.

0 голосов
/ 25 октября 2011

Он будет поддерживать макет внутренних свойств, если вы добавите атрибут сборки в сборку, содержащую тестируемый класс (добавьте в AssemblyInfo.cs):

// This assembly is the default dynamic assembly generated Castle DynamicProxy, 
// used by Moq. Paste in a single line.
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

(Вы, конечно, также должны добавить запись InternalsVisibleTo для своего тестового проекта.)

Если вы сделаете это, вы можете смоделировать любое внутреннее свойство в сборке, к которой оно добавлено. Если вы хотите издеваться над частными или защищенными свойствами, я уверен, что нет способа сделать это напрямую. Если они защищены, вы можете создать наследника Dummy и предоставить ему открытые методы или свойства, которые обращаются к его защищенным членам / манипулируют ими. Я считаю, что на самом деле ничего не поделаешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...