Ich erinnere mich, einen Artikel darüber gelesen zu haben, wie Ruby DI- oder DI-Frameworks nicht wirklich braucht, weil die Klassen offen sind. Daher können Sie den Konstruktor einer Abhängigkeit einfach neu schreiben, sodass ein falsches Objekt zurückgegeben wird.Braucht clojure eine Abhängigkeitsinjektion, um Code testbarer zu machen?
Ich bin sehr neu zu Clojure und funktionale Programmierung. Ich frage mich, ob Clojure Abhängigkeitsinjektion benötigt oder es aus ähnlichen/anderen Gründen darauf verzichten kann. Hier ist ein konkretes Beispiel, mit dem man arbeiten kann (Fühlen Sie sich frei, wie Sie darauf hinweisen, wie mein Design von Clojure nicht idiomatisch ist):
Stellen Sie sich vor, Sie entwickeln einen Web Crawler/Spider. Es muss eine Webseite durchlaufen, die Sie heruntergeladen haben. Dies ist eine Aktion mit Nebenwirkungen. Die Webseite könnte sich bei jeder Abfrage ändern, Ihre Internetverbindung könnte unterbrochen werden usw. Sie findet alle Links auf der Webseite, besucht sie und durchläuft sie auf die gleiche Weise.
Jetzt möchten Sie einen Test schreiben, der den HTTP-Client ausspioniert, so dass er stattdessen eine hartcodierte String-Antwort zurückgibt. Wie rufen Sie das Programm -main
in einem Test und verhindern, dass es den echten HTTP-Client verwendet?
Siehe: http://stackoverflow.com/questions/13085370/what-is-the-clojure-equivalent-to-google-guice – noahlz