Können wir Test Utilities zwischen Kisten teilen?

9

Ich habe crate-0 mit src/lib.rs wie folgt:

%Vor%

Ich habe auch Kiste-1, wo ich das Test-Framework brauche, das ich in Kiste-0 definiert habe:

%Vor%

Der Code hier ist trivial und kann kopiert werden, aber in Wirklichkeit habe ich komplexe Testprogramme, die ich beim Testen von Kiste-1 verwenden möchte.

Ich kann die Testprogramme nicht in eine andere Kiste aufteilen, da ich einen zyklischen Abhängigkeitsfehler bekommen würde: test_utils würde von crate-0 create stuff und crate-0 von test_utils für das Testen abhängen. Ich möchte das auch nicht machen, da es noch weitere Kisten gibt, deren Test-Utilities ich in abhängigen Kisten benutzen möchte.

    
ustulation 17.01.2017, 15:08
quelle

1 Antwort

2

Zwei Lösungen mit deutlich unterschiedlichen Kompromissen:

Separate Kiste für Dienstprogramme

Stellen Sie Ihre Testprogramme, aber nicht Ihre Tests in eine neue Kiste crate-0-testutils . Machen Sie crate-0 dev-depend von crate-0-testutils ; crate-0-testutils hängen von crate-0 ab; crate-1 dev-abhängig von crate-0-testutils und hängen von der Kiste-0 ab.

Dies erzeugt keine zirkuläre Abhängigkeit, da die Dev-Abhängigkeiten nicht weitergegeben werden. Aufgrund der Dev-Abhängigkeit können Ihre Tests in crate-0 immer noch das verwenden, was in crate-0-testutils enthalten ist.

Dies verdoppelt höchstens die Anzahl Ihrer Bibliotheken, wenn all Ihre Creates solche Utilities haben.

Verwenden Sie eine Testfunktion für alle Kisten

Erstellen Sie ein Feature im Cargo.toml von crate-0 , das von nichts abhängig ist:

%Vor%

Und eins in crate-1 , das davon abhängt:

%Vor%

Dann sollten die ersten Tests auf jedem der Kisten fehlschlagen, wenn das Feature nicht aktiviert ist, um einen leichter zu verstehenden Fehler zu machen:

%Vor%

Kompilieren Sie die Dienstprogramme nur, wenn die Funktion aktiviert ist, indem Sie eine Schutzfunktion hinzufügen:

%Vor%

Dies fügt nur ein Merkmal in jeder Kiste hinzu, unabhängig davon, wie viele Testfunktionen es benötigt, hat aber den Nachteil, dass ein spezieller Aufruf der Tests erforderlich ist.

Vermeiden Sie das Hinzufügen dieser Funktion in einer beliebigen Abhängigkeitsdeklaration. Das Testfeature von crate-0 in die Dev-Abhängigkeit von crate-1 aufnehmen, wobei crate-1 auch eine normale Abhängigkeit von crate-0 Ergebnissen in Frachtaufbau crate-0 mit dieser Eigenschaft hat, sogar für das Build-Ziel von crate-1 sogar im Freigabemodus.

    
Jan Zerebecki 19.02.2017, 16:08
quelle

Tags und Links