Ich verwende MATLAB xUnit , um Code zu testen. Ich möchte in der Lage sein, direkt einige Funktionen aufzurufen, die in einem private
-Verzeichnis enthalten sind.
Hier ist ein einfaches replizierbares Setup:
Erstellen Sie sich ein Projektverzeichnis mit zwei Ordnern code
und test
. Erstellen Sie in code
ein Unterverzeichnis namens private
, damit Ihre Verzeichnisstruktur wie folgt aussieht:
Platzieren Sie im Verzeichnis code
eine Funktion
Platziere im private
dir eine Funktion
Platziere im test
dir eine Funktion
Navigiere nun zum Testverzeichnis und rufe runtests
auf. Es sollte ein Fehler angezeigt werden, der besagt, dass sub
nicht definiert ist.
private
Verzeichnisse sind auf dem Matlab-Pfad nicht erlaubt, also ist das keine Option. Ich könnte möglicherweise eine Funktion in das code
Verzeichnis setzen, das Griffe zu allen privaten Funktionen abruft, aber dieses scheint hacky.
Was ist der beste Weg, um Zugriff auf die privaten Funktionen zu testen?
BEARBEITEN:
Die Idee, zum privaten Verzeichnis zu navigieren, hat ein Problem. In der Theorie könnte ich z. B. anrufen,
%Vor% Leider navigiert das Test-Framework zu dem Verzeichnis mit den Tests, sobald Sie run
aufrufen.
Eine Lösung besteht darin, von innerhalb von testsub
zum privaten Verzeichnis zu navigieren und eine Funktionshandle zu der privaten Funktion, die Sie verwenden möchten STR2FUNC , Navigieren Sie dann zurück, um den Test mit diesem Funktions-Handle durchzuführen. Sie könnten diese Schritte sogar in eine separate Hilfsfunktion für Ihren Unit-Test einfügen, zum Beispiel:
Und Sie würden diese Funktion in testsub
wie folgt verwenden:
Das funktioniert, obwohl der MATLAB-Editor mir eine M-Lint Warnung für die Benutzung des Funktion CD : "Die Verwendung der CD-Funktion im MCC ist problematisch." Ich denke, es ist sicher für Sie, diese Warnung zu ignorieren, da 1) die Funktion get_private_fcn
das aktuelle Verzeichnis ändert, dann sofort wieder zurückgibt, nachdem Sie die Funktion handle und 2) nicht Umgang mit einer bereitgestellten Anwendung .
Sie können zwar kein privates Verzeichnis in Ihren Suchpfad einfügen, Sie können jedoch in das private Verzeichnis selbst wechseln.
Dort wird MATLAB die Funktionen sehen und sie benutzen können. So teste ich mich an privaten Funktionen.
Der Punkt von privaten Verzeichnissen ist, Funktionen zu haben, die eine sehr begrenzte Sichtbarkeit haben, d. h. nur für die Funktionen in code
. Daher gibt es keinen offiziellen Weg (zumindest den, den ich kenne), um sie sichtbar zu machen.
Die Funktion, die die Griffe in code/private
abruft, scheint mir der sauberste Weg zu sein.
Die Alternative wäre, testsub
in code
zu platzieren. Dies hat den Vorteil, dass die Testfunktionen immer zusammen mit dem Code, den sie testen sollen, enthalten sind, aber Sie könnten das Gefühl haben, dass dies Ihr Codeverzeichnis "verschmutzt".
Tags und Links unit-testing xunit matlab