2014-12-02 112 views
23

當終端/控制檯測試運行時,我喜歡它實際上以紅色或綠色文本顯示它們的輸出。 Go似乎有很多可用的測試庫。不過,我想只使用Go附帶的默認測試包。有沒有辦法使用紅色和綠色對輸出進行着色?着色golang測試運行輸出

回答

38

您可以爲此創建包裝器外殼腳本,並使用顏色轉義序列爲其着色。下面是在Linux上一個簡單的例子(我不知道這將如何看待窗口,但我想有一種方法.. :))

go test -v . | sed ''/PASS/s//$(printf "\033[32mPASS\033[0m")/'' | sed ''/FAIL/s//$(printf "\033[31mFAIL\033[0m")/'' 
+0

這是一個很好的輕量級解決方案。我沒有想到只是將輸出管道輸送到sed。有用。謝謝。 – 2014-12-02 22:33:12

+1

謝謝!我添加了-cover參數並將其添加爲別名。所以每次我想運行所有的測試,我只是運行'got' – IvRRimUm 2016-12-14 18:33:14

4

你仍然需要一個庫添色換碼,如:

從那裏,指定要着色的內容(StdOut或StdErr,如in this example

+0

目前'kortschak/ct'不支持Windows。 – 2015-09-22 16:17:41

+0

對於Unix和Win10 +,還有[github.com/logrusorgru/aurora](https://github.com/logrusorgru/aurora),它支持Printf/Sprintf格式。例如'fmt.Printf(「value%d」,Red(3))' – 2016-11-07 00:31:35

+0

@IvanBlack謝謝你。我已將您的鏈接添加到答案以獲得更多的可見性。 – VonC 2016-11-07 09:35:21

1

BoltDB有一些看起來像這樣的測試方法:

func assert(tb testing.TB, condition bool, msg string, v ...interface{}) { 
    if !condition { 
     _, file, line, _ := runtime.Caller(1) 
     fmt.Printf("\033[31m%s:%d: "+msg+"\033[39m\n\n", append([]interface{}{filepath.Base(file), line}, v...)...) 
     tb.FailNow() 
    } 
} 

Here are the rest。我加了綠點here

32

您可以使用通用着色器grc來着色任何東西。在Debian/Ubuntu上安裝apt-get install grc。在Mac上,brew install grc

在你的home目錄創建一個config目錄:

mkdir ~/.grc 

然後在~/.grc/grc.conf創建個人GRC配置:

# Go 
\bgo.* test\b 
conf.gotest 

~/.grc/conf.gotest然後創建一個圍棋測試colourization配置,如:

regexp==== RUN .* 
colour=blue 
- 
regexp=--- PASS: .* 
colour=green 
- 
regexp=^PASS$ 
colour=green 
- 
regexp=^(ok|\?) .* 
colour=magenta 
- 
regexp=--- FAIL: .* 
colour=red 
- 
regexp=[^\s]+\.go(:\d+)? 
colour=cyan 

現在你可以運行Go與測試:

grc go test -v ./.. 

輸出示例:

screenshot

爲了避免鍵入grc所有的時間,添加一個別名到你的shell(如果使用bash,無論是~/.bashrc~/.bash_profile或兩者兼而有之,這取決於您的操作系統):

alias go=grc go 

現在,您只需通過運行得到colourization:

go test -v ./.. 
+0

好的一個。我會在我的日誌上嘗試它。 +1 – VonC 2016-10-20 18:16:09

+1

很好的答案。奇蹟般有效。 – 2017-01-17 20:24:47

+0

這真是太棒了。 – Roshambo 2017-06-15 22:50:34

6

還有一個叫richgo的工具,正是這一點,在一個用戶友好的方式。

enter image description here