SetupSet () устарел. Вместо чего? - PullRequest
56 голосов
/ 01 июня 2010

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

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

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

1 Ответ

88 голосов
/ 10 июня 2010

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

...