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.