Ho un test unitario per verificare che un oggetto (ad esempio Foo
) chiami un determinato metodo (ad esempio Bar
) quando un evento viene generato con determinati eventiArg. Per prendere in giro il suddetto metodo, io uso virtuale e stub il Foo
classeCome forzare moq per chiamare il costruttore?
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
mockEventProvider.Raise(x => x.MyEvent += null, myEventArgs) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
Tuttavia, quanto sopra non è riuscita, Bar non sarà chiamato, a quanto pare perché l'oggetto Foo non è costruito evento. Tuttavia, se aggiungo una riga come di seguito:
Mock<Foo> stubbedFoo = new Mock<Foo>(mockEventProvider);
var workAround = stubbedFoo.Object //adding this workaround will work
mockEventProvider.Raise(x => x.MyEvent += null, myEventArgs) //fire the event
stubbedFoo.Verify(foo => foo.Bar()); verify Bar is called as a result
che funzionerà, perché chiamando salire sul .Object apparentemente costringe finto per costruire l'oggetto. C'è una soluzione più elegante di aggiungere questa linea?
I vedi .. pensi che questo sia un difetto nel moq? –
Direi che probabilmente è stata una decisione intenzionale, ma moq è open source quindi puoi cambiarlo se vuoi – devshorts