remarks cref c# .net unit-testing mocking moq

cref - remarks c#



SetupSet() es obsoleto. En lugar de qué? (1)

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. (Ejemplo inspirado, pero llega al punto de la pregunta). Podría hacer algo como esto:

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

Y eso funciona 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?


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

La diferencia es sutil y debe usar Action<T> como parámetro SetupSet , en oposición a Func<T, TProperty> .

La llamada siguiente invocará la sobrecarga no desaprobada:

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

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