2015-05-22 7 views
5

ich teilweise eine Klasse bin spöttisch, die diese beiden Methoden hat:Nsubstitute Anrufe Verfahren Wenn obwohl es DoNotCallBase

public void EmitTo(string connectionId, ChatMessage message) 
{ 
    Clients.Client(connectionId).broadcastMessage(message.User.UserName, message.Message); 
} 

public virtual void Broadcast(ChatMessage message) 
{ 
    Clients.All.broadcastMessage(message.User.UserName, message.Message); 
} 

In meinem Test [SetUp] Ich habe diese Anrufe:

hub = Substitute.ForPartsOf<ChatHub>(myMockedClient, context, groupManager); 
hub.When(x => x.Broadcast(Arg.Any<ChatMessage>())).DoNotCallBase(); 
hub.When(x => x.EmitTo(Arg.Any<string>(), Arg.Any<ChatMessage>())).DoNotCallBase(); 

Ich habe Keine Probleme mit dem Broadcast Aufruf in dieser Zeile oder später, wenn ich die Methode aufrufen (sie tun nichts wie erwartet), aber seltsamerweise löst meine dritte Zeile einen Fehler aus:

Ich bin ein bisschen verloren, da ich genau das gleiche für beide Methoden gemacht habe und ein anderes Verhalten bekommen habe, warum ruft meine When-Methode EmitTo?

Antwort

9

NSubstitute wie die meisten mockenden Frameworks können nur Aufrufe an virtual Methoden abfangen. Es ist in der Lage, den Anruf zu Broadcast zu stoppen, weil es virtuell ist. Sie müssen EmitTo virtuell machen, wenn Sie den Aufruf stoppen möchten. Es muss sein:

+0

Ich war so auf den Rest konzentriert Ich vermisste die Basis, vielen Dank. – Lomithrani

+1

Die richtige Antwort ist bereits gegeben, aber ich wollte auch einen Link zur Dokumentation für andere Benutzer hinzufügen: http://nsubstitute.github.io/help/partial-subs/ –