Подтвердить что ты не робот

SetupSet() устарел. Вместо чего?

Скажем, я хочу использовать Moq для создания обратного вызова для сеттера для хранения свойства set в моем собственном поле для последующего использования. (Продуманный пример - но он доходит до сути вопроса.) Я мог бы сделать что-то вроде этого:

myMock.SetupSet(x => x.MyProperty).Callback(value => myLocalVariable = value);

И это работает отлично. Однако SetupSet устарел в соответствии с Intellisense. Но он не говорит, что следует использовать в качестве альтернативы. Я знаю, что moq предоставляет SetupProperty, который будет авторизовать свойство с помощью поля поддержки. Но это не то, что я ищу. Я хочу зафиксировать заданное значение в моей переменной. Как это сделать с использованием устаревших методов?

4b9b3361

Ответ 1

Я использую версию Moq 3.0.204.1, а SetupSet для этого не является устаревшим. Однако существует пара перегрузок SetupSet, расположенных в MockLegacyExtensions. Вы можете не использовать их и использовать SetupSet, который определен в классе Mock.

Разница тонкая, и вам нужно использовать Action<T> как SetupSet, а не Func<T, TProperty>.

В приведенном ниже вызове вызывается не-устаревшая перегрузка:

myMock.SetupSet(p => p.MyProperty = It.IsAny<string>()).Callback<string>(value => myLocalVariable = value);

Трюк заключается в использовании It.IsAny<string>, который перехватит вызов сеттера любым значением.