Wie importiere ich Testcode von einem Modul in ein anderes, ohne ihn dem Produktionscode auszusetzen?

PHPz
Freigeben: 2024-02-09 21:00:10
nach vorne
591 Leute haben es durchsucht

Wie importiere ich Testcode von einem Modul in ein anderes, ohne ihn dem Produktionscode auszusetzen?

php-Editor Yuzi In der Softwareentwicklung müssen wir oft den Code testen. Wir möchten den Testcode jedoch nicht der Produktionsumgebung aussetzen, um unnötige Verwirrung zu vermeiden. Wie importiert man also Testcode von einem Modul in ein anderes, ohne ihn dem Produktionscode auszusetzen? Dies ist ein häufiges Problem, aber es gibt Lösungen. Dieser Artikel stellt Ihnen eine effektive Methode vor, um dieses Ziel zu erreichen und Ihren Code sicherer und zuverlässiger zu machen.

Frageninhalt

TLDR: Ich habe eine TestLogger-Struktur in logutils/test-logger_test.go eingefügt und versucht, in Authentication/login_tests.go darauf zu verweisen. Beim Erstellen von Tests für das Authentifizierungsmodul beschwert sich der Compiler, dass TestLogger nicht deklariert ist. Die einzige Problemumgehung besteht darin, test-logger_test.go in test-logger.go umzubenennen. Dabei besteht jedoch die Gefahr, dass im Produktionscode auf TestLogger verwiesen wird.

Beim Ausführen von Go-Tests scheint Golang keinen Testcode (Code, der in Dateien mit dem Suffix _test.go deklariert ist) von einem Modul in ein anderes zu importieren. Mache ich etwas falsch oder ist Golang so konzipiert? Gibt es eine Lösung?

Einfaches Beispiel zur Veranschaulichung:

Ich habe ein „Bibliotheks“-Modul (nennen wir es „logutils“) und ein „Anwendungs“-Modul (nennen wir es „Authentifizierung“). Das logutils-Modul verfügt über eigene Tests, die alle implementierten spezifischen Funktionen des Loggers abdecken (z. B. FileLogger, HttpLogger) und alles ist in Ordnung.

Das logutils-Modul deklariert außerdem einen TestLogger, der von „Client“-Modulen (z. B. „Authentifizierung“) verwendet werden kann, um sicherzustellen, dass sie alles korrekt protokollieren, ohne dass eine Datei- oder HTTP-Protokollierung eingerichtet werden muss. Es implementiert im Grunde nur die Logger-Schnittstelle, protokolliert aber lediglich alles in einem Puffer, der am Ende des Tests überprüft werden kann.

So kann das Modul „Authentifizierung“ seine eigene _test.go-Datei deklarieren, die TestLogger instanziiert, und alles funktioniert wie ein Zauber.

Was mich stört, ist, dass TestLogger in der regulären Produktionsdatei (logutils/test-logger.go) und nicht in der Testdatei (logutils/test-logger_test.go) deklariert werden muss, sonst beschwert sich der Authentifizierungstest darüber, dass TestLogger vorhanden ist nicht definiert . Auf diese Weise hindert jedoch nichts daran, dass TestLogger im Produktionscode referenziert/verwendet wird.

Was ich möchte, ist, dass Code in jeder logutils _test.go-Datei in jede Authentifizierungsdatei _test.go importiert werden kann (jedoch nicht in eine Produktions-.go-Datei).

Irgendwelche Erkenntnisse/Vorschläge?

Edit: Tippfehler behoben

Workaround

Das darfst du nicht haben. So einfach. (So ​​etwas wie eine „Produktions-.go-Datei“ gibt es nicht. Testcode ist kein „Nicht-Produktionscode“.)

Das obige ist der detaillierte Inhalt vonWie importiere ich Testcode von einem Modul in ein anderes, ohne ihn dem Produktionscode auszusetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!