例如,在Python中,我可以执行以下操作:
realout = sys.stdout
sys.stdout = StringIO.StringIO()
some_function() # prints to stdout get captured in the StringIO object
result = sys.stdout.getvalue()
sys.stdout = realout
Run Code Online (Sandbox Code Playgroud)
你能在Go中这样做吗?
我有这个功能,在某些情况下记录错误:
func readByte(/*...*/){
// ...
if err != nil {
fmt.Println("ERROR")
log.Print("Couldn't read first byte")
return
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在,在测试文件中,我想检查此函数的输出错误:
c.Assert(OUTPUT, check.Matches, "teste")
Run Code Online (Sandbox Code Playgroud)
我该如何访问日志?我试图放一个缓冲区,但它没有用.在不更改readByte函数代码的情况下捕获此日志的正确方法是什么?
进程如何读取自己的输出流?我正在编写自动化测试,该自动化测试在与测试相同的过程中启动了几个应用程序子流程(应用程序)。因此,标准输出是测试输出和应用程序输出的混合。
我想在运行时读取输出流,如果看到应用程序中的错误,则测试失败。这可能/可行吗?如果是这样,我该怎么办?
注意:我知道我可以将应用程序作为独立的进程启动,然后读取它们的输出流。我现在的工作量很大。
还要注意,这并不是Go单元测试中如何测试函数输出(stdout / stderr)的伪装,尽管该票据是相似且有用的。另一个问题是关于捕获单个函数调用的输出。该票证是关于连续读取整个流的信息。正确答案也有所不同-它需要管道。
我想测试golang命令行应用程序的输出,但是我不太确定如何使用go的测试库来实现。
假设我有一个像这样的程序:
package main
import (
"flag"
"fmt"
)
func main() {
const (
cityDefault = "San Francisco"
cityDoc = "the city you want the forecast for"
)
var city string
flag.StringVar(&city, "city", cityDefault, cityDoc)
flag.StringVar(&city, "c", cityDefault, cityDoc)
flag.Parse()
fmt.Println(city)
}
Run Code Online (Sandbox Code Playgroud)
我想测试这两个:
$ ./myapp -c "Los Angeles"
$ ./myapp -city "Los Angeles"
Run Code Online (Sandbox Code Playgroud)
...输出Lost Angeles。因此,我想问题是,如何集成测试golang命令行应用程序的输出?
我正在尝试测试一些打印ANSI转义码的函数.例如
// Print a line in a color
func PrintlnColor(color string, a ...interface{}) {
fmt.Print("\x1b[31m")
fmt.Print(a...)
fmt.Println("\x1b[0m")
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用Examples来做,但他们似乎不喜欢转义码.
有没有办法测试写入stdout的内容?