Einheit testet private Methoden aus einer Kategorie?

8

Ich habe eine Kategorie in NSString class, die eine private Hilfsmethode enthält. Es wäre praktisch, wenn ich diese Methode in meinem Komponententest verwenden könnte. Ich habe jedoch Schwierigkeiten, es zu enthüllen. Wenn ich eine Klassenerweiterung für NSString erstelle und die Methode hier deklariere, ist die Methode im Komponententest nicht sichtbar. Und es spielt keine Rolle, ob ich die Klassenerweiterung in einer separaten Header-Datei oder als Teil der Unit-Test-.m-Datei erstelle.

Es sieht so aus, als ob ich hier etwas verpasse.

Irgendwelche Hilfe Jungs?

    
Earl Grey 22.01.2014, 17:57
quelle

2 Antworten

15

Die allgemeine Leitlinie für Testeinheiten würde Ihnen sagen, dass Sie Ihre privaten Methoden nicht testen sollten. Testen Sie nur über Ihre öffentlichen Schnittstellen. Private Methoden sind einfach ein Implementierungsdetail , das sich beim Refactoring jederzeit ändern kann. Ihre öffentlichen Schnittstellen sollten ziemlich stabil sein und Ihre privaten Methoden anwenden.

Wenn Sie jedoch weiterhin Ihre privaten Kategoriemethoden testen möchten, funktioniert Folgendes für mich ...

Zuerst Ihre Kategorie:

UIImage + Beispiel.h

%Vor%

UIImage + Beispiel.m

%Vor%

MyExampleTests.m

%Vor%

Deklarieren Sie im Prinzip Ihre private Methode in einer neuen Kategorie in Ihrem Test. Wie oben erwähnt, werden jedoch private Methoden nur für Testzwecke offen gelegt und Ihre Tests an Ihre Implementierung gekoppelt.

    
James Frost 22.01.2014, 18:22
quelle
5

Sie können jede Methode (privat oder nicht) für ein Objekt ausführen, indem Sie einfach performSelector: wie folgt verwenden:

%Vor%

Aber ich stimme James zu, dass Sie das nur tun sollten, wenn es absolut notwendig ist.

    
Johannes Fahrenkrug 22.01.2014 18:31
quelle