Wie können Funktionen in einem privaten Verzeichnis getestet werden?

8

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:

%Vor%

Platzieren Sie im Verzeichnis code eine Funktion

%Vor%

Platziere im private dir eine Funktion

%Vor%

Platziere im test dir eine Funktion

%Vor%

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.

    
Richie Cotton 21.12.2010, 14:08
quelle

3 Antworten

7

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:

%Vor%

Und Sie würden diese Funktion in testsub wie folgt verwenden:

%Vor%

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 .

    
gnovice 21.12.2010, 15:56
quelle
3

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.

    
user85109 21.12.2010 14:17
quelle
1

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".

    
Jonas 21.12.2010 14:16
quelle

Tags und Links