Domanda

Non è necessario virtualizzare tutti gli accessori delle proprietà che desideri deridere il tipo di sconfitta dello scopo di deridere?

Voglio dire, se devo modificare il mio oggetto e virtualizzare ogni singolo acceso che voglio deridere, non potrei ereditare anche la mia classe e deridere io stesso?

È stato utile?

Soluzione

La tua domanda è molto valida ma se ci pensi, non c'è altro modo per deridere una lezione. Se prendi un'interfaccia, è solo un contratto, quindi il framework finto può deridere come lo vuoi, ma se prendi una lezione, ha già un'implementazione per i suoi membri.

Quindi il framework simulato, per poter deridere i membri della classe, deve ereditare dalla classe e sovrascrivere il comportamento del membro come richiesto e a tale scopo solo i membri virtuali funzioneranno.

Per es. Se hai (sto mostrando metodi ma lo stesso vale per le proprietà)

class Foo
{
    public void Bar()
    {

    }
    public virtual void  virtualBar()
    {

    }
}

Quindi il framework finto probabilmente crea qualcosa del genere da deridere

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

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

Ora quando hai

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

Ora quando chiami

foo.Bar();

Non intendi chiamare l'implementazione effettiva, ma poiché è un membro non virtuale, chiamerà il Foo'S Bar()

D'altra parte, chiamare

foo.VirtualBar();

chiamerebbe MockFoo'S VirtualBar() in quanto è un membro virtuale che avrebbe il comportamento iniettato dal framework finto come richiesto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top