Wenn ich versuche, NSubstitute 1.7.1.0 zu verwenden, um das Verhalten von Object.ToString
Um zu reproduzieren:
%Vor%Der Fehler:
%Vor%Gibt es eine Möglichkeit, den obigen Test zu bestehen?
Ist die Ausnahme, die von meinem naiven Test ausgelöst wird, ein Fehler oder ist es "By Design"?
NSubstitute basiert auf der Bibliothek Castle.Core und verwendet dynamische Proxies zum Abfangen und Verwalten von Anrufen. Das Abfangen der Methoden der Objektklasse wird in beiden Frameworks unterdrückt.
Es wird in der IProxyGenerationHook-Standardimplementierung von Castle unterdrückt. Sie finden den Code hier . Ich denke, dafür gibt es Gründe. Sicher, es ist möglich, einen eigenen IProxyGenerationHook zu implementieren, der das Abfangen von Methoden der Object-Klasse zulässt, aber ...
NSsubstitute unterdrückt auch das Abfangen von Objects-Methoden, und die Syntax von NSubstitute ist der Grund dafür. "NSubstitute zeichnet die Anrufe auf, die für einen Vertreter gemacht wurden, und wenn wir Returns aufrufen, greift es den letzten Anruf und versucht, einen bestimmten Wert zurückzuliefern." Angenommen, wir haben den folgenden Code:
%Vor%Wir rufen hier "AMethod ()" auf, NSub fängt die Ausführung ab und macht seine internen Dinge. Angenommen, er fügt "Ersatz" -Wert einem Wörterbuch hinzu, das substitute.GetHashCode () aufruft. Wenn wir die Methode "GetHashCode ()" abfangen würden, wäre dies der letzte aufgezeichnete Anruf. NSub würde den angegebenen Rückgabewert an ihn binden, was falsch ist. Es ist fast unmöglich, so etwas zu vermeiden.
Sie werden Schwierigkeiten haben, irgendwelche Methoden von System.Object
zu ersetzen, da es sehr speziell von .Net behandelt wird.
Dies schlägt beispielsweise auch aus dem gleichen Grund fehl:
%Vor%Aber das funktioniert gut:
%Vor%Entschuldigung, ich kann keine besseren Nachrichten geben, aber die Verspottung von Low-Level-Objekten funktioniert in .Net nicht sehr gut.
Tags und Links c# nsubstitute