相关疑难解决方法(0)

在Go中,如何将函数的stdout捕获到字符串中?

例如,在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中这样做吗?

stdout go

44
推荐指数
3
解决办法
3万
查看次数

如何在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函数代码的情况下捕获此日志的正确方法是什么?

testing go

10
推荐指数
2
解决办法
9901
查看次数

进程可以读取自己的“标准输出”流吗?

进程如何读取自己的输出流?我正在编写自动化测试,该自动化测试在与测试相同的过程中启动了几个应用程序子流程(应用程序)。因此,标准输出是测试输出和应用程序输出的混合。

我想在运行时读取输出流,如果看到应用程序中的错误,则测试失败。这可能/可行吗?如果是这样,我该怎么办?

注意:我知道我可以将应用程序作为独立的进程启动,然后读取它们的输出流。我现在的工作量很大。

还要注意,这并不是Go单元测试如何测试函数输出(stdout / stderr)的伪装,尽管该票据是相似且有用的。另一个问题是关于捕获单个函数调用的输出。该票证是关于连续读取整个流的信息。正确答案也有所不同-它需要管道。

multithreading outputstream go output

7
推荐指数
1
解决办法
86
查看次数

您如何测试golang命令行输出

我想测试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命令行应用程序的输出?

testing go

5
推荐指数
1
解决办法
2435
查看次数

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的内容?

testing ansi-escape go

4
推荐指数
1
解决办法
4969
查看次数