【问题标题】:Is it possible to emulate Example testing with Gomega?是否可以使用 Gomega 模拟示例测试?
【发布时间】:2015-02-21 03:50:21
【问题描述】:

我有一些 go 测试我想更新以使用 Ginkgo 进行 BDD 样式测试。问题是,服务器使用 stdout 和 stderr 进行日志记录,并且许多测试使用 Go 内置的“示例”测试框架,如下所示:

import (
    "fmt"
)

func ExampleConsoleLog() {
    fmt.Printf("Testing %d, %d, %d: %s\n", 1, 2, 3, "mike check")

    // Output:
    // Testing 1, 2, 3: mike check
}

我想使用 Ginkgo 和 Gomega 来断言它们会被打印到标准输出,但是没有内置的匹配器可以告诉我这样做。 Gomega 确实提供了一个gbytes 包,但是没有关于如何将 gbytes.Buffer “附加”到 stdout 或 stderr 的文档。是否有我可以使用的自定义匹配器?

【问题讨论】:

    标签: testing go stdout ginkgo


    【解决方案1】:

    您可以编译二进制文件并启动它并通过gexecgbytes 测试其输出: http://onsi.github.io/gomega/#gexec-testing-external-processes

    如果您尝试测试特定函数的输出(不编译和启动外部库),最简洁的方法可能是注入 io.Writer,然后传入您的 gbytes 缓冲区。还有其他选项,尽管它们有些不雅:In Go, how do I capture stdout of a function into a string?

    【讨论】:

    • 这是我正在尝试测试的命令行库,因此 gexec 方法对我不起作用。至于依赖注入,该库所做的部分工作是确保它可以访问 stdout 和 stderr,因此它们不会被日志机制重定向(由于应用程序其余部分的守护进程)。这就是示例测试方法如此有效的原因。我想我必须捕获 stdout 和 sterr,但这不太优雅,所以我可能会回到常规的 go 测试。
    猜你喜欢
    • 2012-05-14
    • 2014-09-13
    • 1970-01-01
    • 2011-11-22
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 2015-10-13
    相关资源
    最近更新 更多