Мокинг виртуальных свойств только для чтения с помощью moq

Я не смог найти способ сделать это, хотя это можно сделать вручную, так почему бы не с помощью moq?


person gkdm    schedule 21.09.2009    source источник


Ответы (2)


Учитывая этот класс

public abstract class MyAbstraction
{
    public virtual string Foo
    {
        get { return "foo"; }
    }
}

вы можете настроить Foo (свойство только для чтения) следующим образом:

var stub = new Mock<MyAbstraction>();
stub.SetupGet(x => x.Foo).Returns("bar");

stub.Object.Foo теперь будет возвращать bar вместо foo.

person Mark Seemann    schedule 21.09.2009
comment
отличный ответ спасибо. Другими словами, лучше не иметь свойств только для геттеров, потому что их глумить - заноза в заднице? - person Alex Gordon; 06.03.2016
comment
вы видите, что у меня есть несколько свойств только для чтения: drive.google.com / file / d / 0ByqKtGmtuLzZNFhwTWhMMGVRZnc /, и я пытаюсь использовать их родительский класс в качестве тестируемой системы, поэтому я не уверен, как настроить moq, поскольку тестируемая система не является имитацией, тогда как я хотите получить значение от этих получателей - person Alex Gordon; 06.03.2016
comment
@l --''''''--------- '' '' '' '' '' 'Свойство только для получения - это только синтаксический сахар по сравнению с методом, поэтому, если вы возьмете этот оператор до логического завершения можно сказать, что лучше не иметь методов, возвращающих данные. Я с этим совершенно не согласен. - person Mark Seemann; 06.03.2016
comment
отличный момент. не могли бы вы подсказать, как я могу внедрить эти геттеры в конкретный (не издевательский) класс? - person Alex Gordon; 06.03.2016
comment
извиняюсь, если я не понимаю, это часть проблемы, мне просто нужен способ выразить / описать это - person Alex Gordon; 06.03.2016
comment
@l --''''''--------- '' '' '' '' '' '' Это звучит как кандидат на новый вопрос здесь, в Stack Overflow :) - person Mark Seemann; 06.03.2016
comment
Позвольте нам продолжить это обсуждение в чате. - person Alex Gordon; 06.03.2016
comment
вот вы где, сэр stackoverflow.com/questions/35827217/ - person Alex Gordon; 06.03.2016

Вы должны убедиться, что недвижимость виртуальная, чтобы это работало.

person user14403065    schedule 06.10.2020
comment
Отвечая на старый вопрос, на который уже есть принятый ответ, постарайтесь дать ответ, который либо добавляет что-то новое, либо иным образом помогает по отношению к нему. Поскольку ваш текущий ответ прямо сейчас, это больше комментарий, чем ответ. Помимо указания того, что необходимо обеспечить для того, чтобы что-то работало, обычно гораздо полезнее также включать конкретный пример того, как это сделать. См. Также руководство по внесению вкладов для справки. - person Ivo Mori; 07.10.2020