2010-06-01 5 views
51

Diciamo che voglio usare Moq per creare un callback su un setter per memorizzare la proprietà set nel mio campo per un uso successivo. (. Esempio forzato - ma si arriva al punto della questione) ho potuto fare qualcosa di simile:SetupSet() è obsoleto. Al posto di cosa?

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

e che funziona bene. Tuttavia, SetupSet è obsoleto secondo Intellisense. Ma non dice cosa dovrebbe essere usato come alternativa. So che moq fornisce SetupProperty che autowire la proprietà con un campo di supporto. Ma non è quello che sto cercando. Voglio catturare il valore impostato nella mia variabile. Come dovrei farlo usando metodi non obsoleti?

risposta

75

Sto usando Moq versione 3.0.204.1 e SetupSet non è contrassegnato come obsoleto per me. Tuttavia, ci sono un paio di sovraccarichi SetupSet situati in MockLegacyExtensions. È possibile evitare di utilizzarli e utilizzare SetupSet definito nella classe Mock.

La differenza è sottile ed è necessario utilizzare Action<T> come parametro SetupSet, al contrario di Func<T, TProperty>.

La chiamata sotto richiamerà il sovraccarico non obsoleti:

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

Il trucco è quello di utilizzare It.IsAny<string>, che intercettare una chiamata setter con qualsiasi valore.

+1

È un peccato che sia necessario specificare l'argomento generico per 'Richiamata <>' – RobSiklos

+0

@RobSiklos Quale vergogna? Nella [Avvio rapido] (https://code.google.com/p/moq/wiki/QuickStart) ha chiamato la sintassi del metodo generico equivalente _alternate_ – Yaro

+4

@RobSiklos È possibile scrivere 'Callback ((valore stringa) => myLocalVariable = valore) ' – LazyTarget