2010-07-08 12 views
9

Wie einige von Ihnen wissen, ist es in der Regel nicht möglich, eine statische Methode in .net zu verspotten.Wie verspottet "Typemock Isolator" statische Methoden?

Mocking, ich meine, eine Methode in einer Klasse durch eine andere Methode mit der gleichen Signatur zu ersetzen, in der Regel für Testzwecke.

Die zwei wichtigsten Methoden, die verwendet werden, um eine Methode zu verspotten, bestehen darin, sie virtuell zu deklarieren oder sie in einer Schnittstelle zu definieren. Keine dieser beiden Optionen ist für statische .net-Methoden zulässig.

Allerdings gibt es ein teures Tool namens "Typemock Isolator", mit dem man statische Methoden verspotten kann. Wie schafft Isolator diese scheinbar unmögliche Leistung?

Antwort

8

Es ist in der FAQ.

Grundsätzlich instanziiert eine Typemock-Fälschung ein neues Objekt vom ursprünglichen Typ und hakt sich in jeden Methoden- und Eigenschaftsaufruf für dieses Objekt ein, leitet den Aufruf an die Fälschung um und gibt die von Ihnen angegebenen Werte zurück. Es verwendet einige tiefe Voodoo im .NET Framework (.NET Profiler API, wenn Sie daran interessiert sind), dies zu tun, aber es ist alles "legitim". Technisch kann jeder ein Duplikat von Typemock bauen, aber ich muss noch eins sehen.

+0

Es heißt auf der Website, "Typemock Isolator verwendet aspektorientierte Technologie, um Anrufe aus dem echten Code umzuleiten. Dies ermöglicht Entwicklern, das Verhalten der externen Komponente für ein getestetes Szenario zu definieren." Ich hatte gehofft, mehr darüber wissen zu können, wie das passiert. Ich habe von Aspect-orientierten "Post-Compiler" -Tools wie PostSharp gehört. –

+0

@Rising Star: Entschuldigung, ich habe bearbeitet, um weitere Informationen hinzuzufügen. PostSharp ändert tatsächlich kompilierten Code. Typemock verwendet die .NET Profiler-API, um Methodenaufrufe *, wie sie * genannt werden, abzufangen und sie an die Fälschung weiterzuleiten. – Randolpho

+0

AKZEPTIERT: .net profiler api. Sagen sie woanders auf ihrer Webseite, dass sie die .net Profiler API benutzen, oder wissen Sie etwas anderes? –