2012-07-19 13 views
12

ho bisogno di verificare che un metodo è stato chiamato con un oggetto di un tipo specificocome verificare che un metodo è stato chiamato con un argomento di un tipo specifico

questo è l'interfaccia con il metodo che voglio provare che è stato chiamato:

interface IPlayer 
{ 
    void Send(object message); 
} 

il test:

var player1 = A.Fake<IPlayer>(); 
room.AddPlayer(player1); 

room.DoSomething(); 

A.CallTo(() => player1.Send(A<Type1>.Ignored)).MustHaveHappened(); 

poiché ci sono più chiamate a player1.Send con molti oggetti diversi ottengo InvalidCastException

qualcuno sa come farlo correttamente?

risposta

13

Questo legato alla progettazione, quello che stai cercando di fare è in realtà:

A.CallTo(() => player1.Send(A<object>.That.IsInstanceOf(typeof(MessageType)))).MustHaveHappened(); 

Il tipo specificato in A <? > dovrebbe sempre essere il tipo esatto di parametro che il metodo richiede. In realtà ho preso in considerazione la possibilità di cambiarlo in modo da poter limitare il tipo nel modo in cui lo si propone e, se ricordo bene, il motivo principale (ma penso che c'erano anche altri motivi) era che sarebbe stato più fragile nei casi in cui si introducessero sovraccarichi.

Si consideri ad esempio che avete introdotto il seguente sovraccarico sull'interfaccia IPlayer:

interface IPlayer 
{ 
    void Send(object message); 
    void Send(Type1 message); 
} 

Una volta che si introduce questo sovraccaricare le modifiche di prova che significa.

+0

è buono il modo in cui l'hai fatto, ho pensato che ci dovrebbe essere qualcosa del genere, proprio non riuscivo a trovarlo nel wiki – Omu

Problemi correlati