gpt4 book ai didi

go - 使用 go 和 ginkgo 测试标准输出

转载 作者:IT王子 更新时间:2023-10-29 01:17:56 27 4
gpt4 key购买 nike

在这里,我正在尝试在 go 命令行应用程序上执行 BDD。我正在使用 Ginkgo,它包装了 testing.go 并让你做更具表现力的 BDD。 https://github.com/onsi/ginkgo

我在读取标准输出以对其进行断言时遇到问题。

发现在 pkg/testing 示例中,在运行前对输出进行 stub ,但我找不到读取该输出的方法:http://golang.org/src/pkg/testing/example.go

这是我想做的:

cli.go

 package cli

import "fmt"

func Run() {
fmt.Println("Running cli")
}

cli_test.go

package cli_test

import (
. "github.com/altoros/bosh_deployer_cli/lib/cli"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)

var _ = Describe("Cli", func() {
It("should parse update stemcell flag", func() {
Run()
Expect(stdout).To(Equal("running cli"))
})
})

最佳答案

测试标准输出可能很棘手。您有多项选择。

您可以在测试期间覆盖 os.Stdout:(考虑检查错误)

var _ = Describe("Cli", func() {
It("should parse update stemcell flag", func() {
r, w, _ := os.Pipe()
tmp := os.Stdout
defer func() {
os.Stdout = tmp
}()
os.Stdout = w
go func() {
Run()
w.Close()
}()
stdout, _ := ioutil.ReadAll(r)
Expect(string(stdout)).To(Equal("Running cli\n"))
})
})

或者您可以将编写器传递给您的函数:

cli.go

package cli

import (
"fmt"
"io"
)

func Run(w io.Writer) {
fmt.Fprintln(w, "Running cli")
}

cli_test.go

package cli_test

import (
. "cli"
"io"
"io/ioutil"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)

var _ = Describe("Cli", func() {
It("should parse update stemcell flag", func() {
r, w := io.Pipe()
go func() {
Run(w)
w.Close()
}()
stdout, _ := ioutil.ReadAll(r)
Expect(string(stdout)).To(Equal("Running cli\n"))
})
})

main.go

package main

import (
"cli"
"os"
)

func main() {
cli.Run(os.Stdout)
}

关于go - 使用 go 和 ginkgo 测试标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609734/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com