setup mock c# unit-testing properties moq

c# - mock - Moq: ¿configurar una propiedad sin setter?



moq setup properties (2)

Tengo la siguiente clase:

public class PairOfDice { private Dice d1,d2; public int Value { get { return d1.Value + d2.Value; } } }

Ahora me gustaría utilizar un PairOfDice en mi prueba que devuelve el valor 1, aunque utilizo valores aleatorios en mis dados reales:

[Test] public void DoOneStep () { var mock = new Mock<PairOfDice>(); mock.Setup(x => x.Value).Return(2); PairOfDice d = mock.Object; Assert.AreEqual(1, d.Value); }

Desafortunadamente recibo una Invalid setup on non-overridable member error de Invalid setup on non-overridable member . ¿Que puedo hacer en esta situacion?

Tenga en cuenta que este es mi primer intento de implementar Unit-Tests.


Tu problema es porque no es virtual . No porque no tienes un colocador.

Moq no puede construir un Proxy porque no puede anular su propiedad. O necesita usar una interfaz, un método virtual o un método abstracto.


Puedes usar .SetupGet en tu objeto simulado.

p.ej.

[Test] public void DoOneStep () { var mock = new Mock<PairOfDice>(); mock.SetupGet(x => x.Value).Returns(1); PairOfDice d = mock.Object; Assert.AreEqual(1, d.Value); }

Mira aquí para más detalles.