2010-06-01 14 views
51

Digamos que quiero usar Moq para crear una devolución de llamada en un setter para almacenar la propiedad set en mi propio campo para su uso posterior. (. Contrived ejemplo - pero se vuelve al punto de la cuestión) que podría hacer algo como esto:SetupSet() es obsoleto. En lugar de qué?

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

y que funciona muy bien. Sin embargo, SetupSet es obsoleto de acuerdo con Intellisense. Pero no dice qué debería usarse como alternativa. Sé que moq proporciona SetupProperty, que conectará automáticamente la propiedad con un campo de respaldo. Pero eso no es lo que estoy buscando. Quiero capturar el valor establecido en mi propia variable. ¿Cómo debo hacer esto usando métodos no obsoletos?

Respuesta

75

Estoy utilizando Moq versión 3.0.204.1 y SetupSet hace no está marcado como obsoleto para mí. Sin embargo, hay un par de sobrecargas SetupSet ubicadas en MockLegacyExtensions. Puede evitar usarlos y usar SetupSet que se define en la clase Mock.

La diferencia es sutil y necesita usar Action<T> como parámetro SetupSet, a diferencia del Func<T, TProperty>.

La llamada a continuación invocará la no sobrecarga en desuso:

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

El truco es usar It.IsAny<string>, que interceptar una llamada incubadora con cualquier valor.

+1

Es una pena que tenga que especificar el argumento genérico para 'Devolución de llamada <>' – RobSiklos

+0

@RobSiklos ¿Qué vergüenza? En el [Inicio rápido] (https://code.google.com/p/moq/wiki/QuickStart) se llamó _alternate equivalente generic method syntax_ – Yaro

+4

@RobSiklos Puede escribir 'Callback ((valor de cadena) => myLocalVariable = value) ' – LazyTarget

Cuestiones relacionadas