php-Editor Xinyi stellt Ihnen vor, wie Sie den Initialisierungscode von Testabhängigkeiten verwalten. Bei der Entwicklung von Software müssen Sie häufig verschiedene Testtools und Frameworks verwenden. Diese Tools und Frameworks erfordern möglicherweise Initialisierungscode zur Konfiguration und Vorbereitung. Die Art und Weise, wie Sie diesen Initialisierungscode verwalten, ist wichtig für die Wartbarkeit und Skalierbarkeit Ihrer Tests. Im Folgenden erfahren Sie ausführlich, wie Sie den Initialisierungscode von Testabhängigkeiten verwalten, um Softwaretests besser durchführen zu können.
Ich habe einen Protokollierungswrapper (implementiert mit Logrus unten) und verwende dieses Paket, um meine Anwendung zu protokollieren. Ich mache das, indem ich die Logger-Variable per Abhängigkeitsinjektion an jedes erforderliche Paket übergebe.
Hier muss ich beim Schreiben von Testfällen für jedes Paket etwas Code schreiben, um das Logger-Paket zu initialisieren. Wie können wir vermeiden, für jeden Testfall eines Pakets, das einen Logger verwendet, Initialisierungscode zu schreiben?
logger/log.go
type logger interface { info(args ...interface{}) infof(format string, keyvals ...any) infowithfields(fields map[string]interface{}, msg ...interface{}) debug(args ...interface{}) debugf(format string, keyvals ...any) debugwithfields(fields map[string]interface{}, msg ...interface{}) }
app_test.go
func setupLogrusLogger() (*bytes.Buffer, Logger) { buf := &bytes.Buffer{} logrusLogger := log.New() logrusLogger.Out = buf logrusLogger.Formatter = &log.JSONFormatter{} return buf, NewLogrusLogger(logrusLogger) } func TestSomething(t *testing.T) { // buf can be used to inspect what gets logged if required buf, logger := setupLogrusLogger() Something(logger) }
Hier muss ich für jedes Paket, das einen Logger verwendet, den Logger initialisieren, indem ich etwas wie setuplogruslogger
definiere. Gibt es eine Möglichkeit zu vermeiden, dass ich dies für jedes Paket, für das ich Tests schreibe, separat schreibe? setuplogruslogger
的内容来初始化记录器。有什么方法可以避免为我正在为其编写测试的每个包单独编写此内容?
导出依赖初始化函数并在非 _test.go
_test.go
Exportieren Sie die Abhängigkeitsinitialisierungsfunktion und deklarieren Sie sie in einer Nicht-
Und solange Sie ein solches Testdienstprogrammpaket nur aus einer
-Datei (und nicht aus einer normalen Datei) importieren, gelangt der Testdienstprogrammcode nicht in die kompilierte Binärdatei des eigentlichen Programms.
net/http/httptest
Beispiele für solche Testdienstprogrammpakete finden Sie in der Standardbibliothek:
net/internal/socktest
Paket httptest bietet Dienstprogramme für HTTP-Tests.
os/exec/internal/fdtest
Das Socktest-Paket bietet Dienstprogramme zum Testen von Steckdosen.
p>
testing/quick
Das Paket fdtest bietet Testhilfen für die Arbeit mit Dateideskriptoren in allen Execs.
testing/fstest
Package Quick implementiert Hilfsfunktionen zur Unterstützung bei Black-Box-Tests.
Das obige ist der detaillierte Inhalt vonSo verwalten Sie den Initialisierungscode für Testabhängigkeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!