Ich habe crate-0 mit src/lib.rs
wie folgt:
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.
Zwei Lösungen mit deutlich unterschiedlichen Kompromissen:
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.
Erstellen Sie ein Feature im Cargo.toml
von crate-0
, das von nichts abhängig ist:
Und eins in crate-1
, das davon abhängt:
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.
Tags und Links unit-testing rust