2010-11-09 9 views

Respuesta

14

Probablemente encontré una de las siguientes diferencias.

Si está intentando simular una propiedad de solo lectura, debe usar SetupGet ya que SetupProperty no funciona en ese caso. Mientras que SetupProperty se puede utilizar para propiedades que no sean de solo lectura si desea establecer la expectativa.

Por ejemplo, a continuación, no funcionará

public interface IXyz 
{ 
    int Id { get; } 
} 

//Test Side Code  
var _mock = new Mock<IXyz>(); 
_mock.SetupProperty(x => x.Id, 1054); 

Si intenta ejecutar el código anterior, se van a plantear diciendo System.ArgumentException: Propiedad IXyz.Id es de sólo lectura

Así que si Cambia el código a continuación, funcionará

_mock.SetupGet(x => x.Id).Returns(1054); 
+0

Sugiera editar esto al final de su respuesta, es lo que hacen todos los demás –

+1

No creo que sea 100% correcto. De acuerdo con la documentación, SetupProperty se utiliza para anotación, no para establecer expectativas. –

12

SetupSet no está marcado como obsoleto. Puede estar pensando en ExpectSet, que está marcado como obsoleto con el mensaje "ExpectSet ha cambiado el nombre a SetupSet".

SetupSet le permite indicar la expectativa de que la propiedad se establecerá:

mock.SetupSet(x => x.Prop = "bar").Verifiable(); 
mock.Object.Prop = "foo"; 
mock.Verify(); // fails 

SetupProperty se ve como una forma de código auxiliar una propiedad en la maqueta (ver la misma sección de la documentación como para SetupSet).

+0

Sí, pensé que SetupProperty actúa tanto para getter como para setter, pero ¿para qué sirve SetupSet? – DotNetInfo

+0

@Nimesh, agregué un ejemplo de uso de 'SetupSet' para verificar que se llamó al setter de propiedades. –

+1

@adrift, actualmente ninguno de los enlaces funciona. Gracias por la explicación sin embargo. –