Ich versuche, ein Stück Code in Ruby zu testen, das File.open
aufruft. Um es zu verharmlosen, habe ich File.open
an folgendes angepasst:
Das Problem ist, dass ich rcov verwende, um diese ganze Sache auszuführen, da es File.open benutzt, um Code-Coverage-Informationen zu schreiben, es bekommt die monkey-patched-Version statt der echten. Wie kann ich diese Methode deaktivieren, um sie auf ihre ursprüngliche Methode zurückzusetzen? Ich habe versucht, mit alias
herumzualbern, aber bis jetzt vergeblich.
File
ist nur eine Konstante, die eine Instanz von Class
enthält. Sie könnten es auf eine temporäre Klasse setzen, die auf open
reagiert, und dann die ursprüngliche wiederherstellen:
Sie können es einfach wie folgt alias:
%Vor%z.B.:
%Vor%Sie können jetzt noch über File.old_open
auf die ursprüngliche File.open-Methode zugreifenAlternativ könnten Sie auch so etwas ausprobieren:
Der richtige Weg, dies zu tun, ist, ein Stubbing-Framework zu verwenden, wie Dan sagt.
Zum Beispiel würden Sie in rspec Folgendes tun:
%Vor%Aber für Neugierige, hier ist ein halbwegs sicherer Weg, es ohne externe Bibliotheken zu tun. Die Idee ist, den Stub so zu isolieren, dass möglichst wenig Code davon betroffen ist.
Ich habe dieses Skript isolated-patch.rb
:
Demo:
%Vor%Tags und Links ruby testing monkeypatching rcov