2016-10-01 2 views
0

Ich verwende RSpec zum Testen meiner Klassen auf Rails.RSpec - Testmethoden, die private Methoden aufrufen, die mokiert werden sollen

Ich frage mich, was eine gute Möglichkeit ist, Methoden zu testen, die private Methoden aufrufen.

Zum Beispiel habe ich diese Klasse:

Class Config 
    def configuration(overrides) 
    @config.merge(overrides) 
    end 

    private 

    def read_config_from_yml 
    @config ||= YAML.load()... 
    end 
end 

die Konfigurationsmethode zu testen, müssen wir die read_config_from_yml Methode irgendwie lustig zu machen. Ich weiß, dass es nicht gut ist, einfach die private Methode read_config_from_yml oder die Instanzvariable @config zu verspotten, weil das mit den Interna des Objekts zu tun haben würde.

Was kann ich mir vorstellen auf meinem Kopf:

  1. read_config_from_yml öffentliche

  2. hinzufügen Setter-Methode für config (zu vermeiden, dass die Instanzvariable spöttisch) machen

Sind diese Hacks? Irgendwelche anderen Ideen?

Antwort

0

Eine Idee wäre, tatsächlich eine Kopie der YAML-Datei im Test zu erstellen. Sie könnten ein Snippet der Datei, die Sie in Ihrem Produktionscode verwenden, erstellen, in den erwarteten Dateispeicherort schreiben und nach Abschluss des Tests löschen.

Dies würde Stubbing vermeiden und Ihnen erlauben, Ihre Methode privat zu halten.

Verwandte Themen