Puede simular cualquier interfaz y cualquier miembro abstracto o virtual. Eso es básicamente eso.
Esto significa que los siguientes son absolutamente posible:
var imock = new Mock<IMyClass>();
var aMock = new Mock<SomeAbstractClass>();
Si los miembros heredados de SomeAbstractClass no están sellados, también puede MiClase simulacro:
var mcMock = new Mock<MyClass>();
si esto tiene sentido o no depende de la implementación de MyClass. Digamos que SomeAbstractClass se define así:
public abstract class SomeAbstractClass
{
public abstract string GetStuff();
}
Si el método GetStuff en MiClase se implementa como este, todavía se puede anularlo:
public override string GetStuff()
{
return "Foo";
}
Esto permitirá escribir:
mcMock.Setup(x => x.GetStuff()).Returns("Bar");
ya que a menos que esté sellado explícitamente, GetStuff sigue siendo virtual. Sin embargo, si hubieras escrito GetStuff así:
public override sealed string GetStuff()
{
return "Baz";
}
No sería capaz de burlarse de ella. En ese caso, obtendría una excepción de Moq estableciendo que es una anulación inválida de un miembro no virtual (ya que ahora es sealed
).
Creo que su pregunta tenía sentido que él estaba preguntando es posible burlarse del * objeto * MyClass * equivalente en su pregunta –
No, porque en ese caso la pregunta correcta debería haber sido: ¿Puedo usar Moq para burlarme de cualquier clase concreta? ? La respuesta simplemente hubiera sido no. Por lo que sé, Rhino se burla de esto. –