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

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

王林
發布: 2024-02-12 16:15:05
轉載
510 人瀏覽過

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板