2012-07-19 14 views
12

muszę sprawdzić, czy ta metoda została wywołana z obiektu określonego typujak sprawdzić, czy ta metoda została wywołana z argumentem określonego typu

Jest to interfejs z metodą, że chcę, aby przetestować że był nazywany:

interface IPlayer 
{ 
    void Send(object message); 
} 

test:

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

room.DoSomething(); 

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

ponieważ istnieje wiele połączeń do player1.Send z wielu różnych obiektów mam InvalidCastException

Ktoś wie, jak to zrobić właściwie?

Odpowiedz

13

Jest to zgodne z projektem, co próbujesz zrobić, to rzeczywiście:

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

typ określony w <? > powinien zawsze być dokładnym parametrem, jaki ma ta metoda. Tak naprawdę rozważałem zmianę tej opcji, aby można było ograniczyć typ, jaki proponujesz i jeśli dobrze pamiętam, głównym powodem (ale myślę, że były też inne powody) było to, że byłby on bardziej delikatny w przypadkach, w których wprowadzasz przeciążenia.

Rozważmy na przykład, że wprowadzono następujące przeciążenia na interfejsie iPlayer:

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

Po wprowadzenie tej zmiany przeciążenia testowe sens.

+0

To dobrze, jak to zrobiłeś, myślałem, że powinno być coś takiego, po prostu nie mogłem go znaleźć na wiki – Omu

Powiązane problemy