2011-10-25 10 views
0

Кто-нибудь знает, поддерживает ли функциональный синтаксис Moq установки для непубличных свойств? Я заметил, что это не сработает.Настройка непубличных свойств с использованием функционального синтаксиса 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) 
+0

Пожалуйста, покажите пример кода, который вы пытаетесь высмеять, настройку moq и любые ошибки, которые вы получаете. – PatrickSteele

+0

Чтобы издеваться над внутренним членом, для меня не имеет никакого смысла. Не могли бы вы дать образец, поэтому я понимаю необходимость этого? – Fischermaen

ответ

0

Он будет поддерживать насмешливый внутренние свойства, если добавить атрибут сборки в сборку, содержащей класс проверяемого (добавить в 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-наследник и предоставить ему общедоступные методы или свойства, которые обеспечивают доступ/управление его защищенными членами. Я считаю, что для частных людей вы действительно ничего не можете сделать.

1

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

Смежные вопросы