2012-07-19 9 views
12

necesito para verificar que un método se llama con un objeto de un tipo específicocómo comprobar que un método se llama con un argumento de un tipo específico

esta es la interfaz con el método que quiero probar que se llamaba:

interface IPlayer 
{ 
    void Send(object message); 
} 

la prueba:

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

room.DoSomething(); 

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

ya que hay varias llamadas a player1.Send con muchos objetos diferentes llego InvalidCastException

¿Alguien sabe cómo hacer esto correctamente?

Respuesta

13

Esto es por diseño, lo que estamos tratando de hacer es en realidad:

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

El tipo especificado en A <? > siempre debe ser el tipo de parámetro exacto que toma el método. Realmente consideré cambiarlo para que pudieras restringir el tipo de la forma en que propones y si mal no recuerdo el motivo principal (pero creo que también hubo otros motivos) fue que sería más frágil en los casos en que introduzcas sobrecargas.

Por ejemplo, considere que usted introdujo la siguiente sobrecarga en la interfaz de iPlayer:

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

Una vez que se introduce esta sobrecarga de los cambios de las pruebas que significa.

+0

es bueno como lo hiciste, pensé que debería haber algo como esto, simplemente no lo pude encontrar en la wiki – Omu

Cuestiones relacionadas