Heim  >  Artikel  >  Backend-Entwicklung  >  Golang Testscript .txtar-Syntax für Text, der in stderr oder stdout enthalten ist

Golang Testscript .txtar-Syntax für Text, der in stderr oder stdout enthalten ist

王林
王林nach vorne
2024-02-12 16:15:05457Durchsuche

golang testscript .txtar 语法,用于 stderr 或 stdout 中包含的文本

Frageninhalt

Ich lerne, wie man das Modul https://github.com/rogpeppe/go-internal testscript zum Testen von CLI-Programmen verwendet.

Wenn ich diese Zeile in der .txtar-Datei verwende:

stderr /No help topic/gm

...Die tatsächliche Fehlerausgabe ist:

No help topic for 'totalfoobar'

Ich erhalte eine Fehlermeldung usage: stderr [-count=N] 'pattern'.

Ich habe mir die Dokumentation hier angesehen und um ehrlich zu sein, ist sie schwer zu verstehen. Ich sehe keine Erklärung dafür, was -count=N bedeutet.

Ich habe alle folgenden Variationen ausprobiert:

stderr -count=1 No help topic for 'totalfoobar'
stderr No help topic for 'totalfoobar'
stderr *No help topic*

Unabhängig von der Zeichenfolge schlägt die Behauptung immer noch mit dem gleichen Fehler fehl.

F: Wie kann ich für flexiblere Tests einen Teilstring der gesamten stderr-/stdout-Ausgabe erhalten?

Workaround

Zitieren Sie das Muster in einfache Anführungszeichen:

// parse parses a single line as a list of space-separated arguments
// subject to environment variable expansion (but not resplitting).
// Single quotes around text disable splitting and expansion.
// To embed a single quote, double it: 'Don”t communicate by sharing memory.'
func (ts *TestScript) parse(line string) []string

Das Ergebnis wird schließlich als args-Parameter an scriptMatch übergeben. Die Implementierung von scriptMatch zeigt, dass zusätzlich zum optionalen Flag -count nur args 参数传递给 scriptMatch 最后。 scriptMatch 的实现表明,除了可选的 -count 标志之外,它只需要 1 参数。如果 No help topic1 Parameter erforderlich sind. Wenn Kein Hilfethema nicht in Anführungszeichen gesetzt ist, wird es in 3

Parameter analysiert, was nicht wie erwartet ist:

extraUsage := ""
want := 1
// [code truncated]
if len(args) != want {
    ts.Fatalf("usage: %s [-count=N] 'pattern'%s", name, extraUsage)
}

Übrigens ist das Muster, mit dem es kompiliert wird, wie folgt:

re, err := regexp.Compile(`(?m)` + pattern)

Denken Sie daran, dass Sie reguläre Ausdrücke mit der Go-Flavor-Syntax schreiben sollten. 🎜

Das obige ist der detaillierte Inhalt vonGolang Testscript .txtar-Syntax für Text, der in stderr oder stdout enthalten ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen