Requisiti MOQ? Sconfigge lo scopo?
-
28-10-2019 - |
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?
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.