Pregunta

¿No se requiere virtualizar todos los accesorios de propiedades que desea burlarse de la derrota del propósito de burlarse?

Quiero decir, si tengo que modificar mi objeto y virtualizar cada acesor que quiero burlarse, ¿no podría heredar mi clase y burlarme de él yo mismo?

¿Fue útil?

Solución

Su pregunta es muy válida, pero si lo piensa, no hay otra forma de burlarse de una clase. Si toma una interfaz, es solo un contrato, por lo que el marco simulado puede burlarse de cómo la desea, pero si toma una clase, ya tiene una implementación para sus miembros.

Por lo tanto, el marco simulado, para poder burlarse de los miembros de la clase, tiene que heredar de la clase y anular el comportamiento del miembro según lo solicitado y, para este propósito, solo los miembros virtuales funcionarán.

Para EG. Si tiene (estoy mostrando métodos, pero lo mismo es cierto para las propiedades)

class Foo
{
    public void Bar()
    {

    }
    public virtual void  virtualBar()
    {

    }
}

Entonces el marco simulado probablemente crea algo como esto para burlarse

public class MockFoo : Foo
{
    public override void virtualBar()
    {
        // mockery action
    }

    public new void Bar()
    {
        // mockery action
    }
}

Ahora cuando tienes

Foo foo = GetMockObject(); // you get an instance of MockFoo

Ahora cuando llamas

foo.Bar();

No tiene la intención de que llame a la implementación real, pero como es un miembro no virtual, llamará al Foo's Bar()

Por otro lado, llamando

foo.VirtualBar();

Llamaría MockFoo's VirtualBar() Como es un miembro virtual que tendría el comportamiento inyectado por el marco simulado según lo solicitado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top