首頁 >後端開發 >Golang >golang testscript .txtar 語法,用於 stderr 或 stdout 中包含的文本

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

王林
王林轉載
2024-02-12 16:15:05514瀏覽

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

問題內容

我正在學習如何使用 https://github.com/rogpeppe/go-internal testscript 模組測試 cli 程式。

當我在 .txtar 檔案中使用此行時:

stderr /No help topic/gm

...實際的錯誤輸出是:

No help topic for 'totalfoobar'

我收到錯誤 usage: stderr [-count=N] 'pattern'

我已經查看了這裡的文檔,說實話,這很難理解。我沒有看到任何關於 -count=N 含義的解釋。

我嘗試了以下所有變體:

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

無論字串是什麼,斷言仍然失敗並出現相同的錯誤。

問:如何取得總 stderr / stdout 輸出的子字串,以便進行更靈活的測試?

解決方法

用單引號引用模式:

// 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

結果作為 args 參數傳遞給 scriptMatch 最後。 scriptMatch 的實作表明,除了可選的 -count 標誌之外,它只需要 1 參數。如果 No help topic 不加引號,則會被解析為 3 個參數,不符合預期:

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

順便說一句,它編譯的模式如下:

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

請記住,您應該使用 Go 風味語法來編寫正規表示式。

以上是golang testscript .txtar 語法,用於 stderr 或 stdout 中包含的文本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除