buildkite/bintest

GitHub: buildkite/bintest

一个 Go 测试库,用于生成可被实时编排和断言的 mock 可执行文件,解决外部命令调用的测试难题。

Stars: 11 | Forks: 0

# Bintest [![文档](https://godoc.org/github.com/buildkite/bintest?status.svg)](http://godoc.org/github.com/buildkite/bintest) 一组用于生成可用于测试的 fake binary 的工具。它会编译一个 binary,然后可以在你的测试套件中进行编排,随后用于断言检查。 Mock 可以与调用它们的测试进行实时通信和响应,从而能够测试复杂的依赖关系。请参阅 https://github.com/buildkite/agent/tree/master/bootstrap/integration,了解我们是如何使用它来测试 buildkite-agent 的 bootstrap 过程的。 ## Mock Mock 是你常见的 mock 对象,但它是一个可执行文件,你的代码可以将其作为 shell 外部命令来调用,并随后对其进行断言测试。 ``` agent, err := bintest.NewMock("buildkite-agent") if err != nil { t.Fatal(err) } agent. Expect("meta-data", "exists", "buildkite:git:commit"). AndExitWith(1) agent. Expect("meta-data", "set", mock.MatchAny()). AndExitWith(0) agent. Expect("meta-data", "set", "buildkite:git:branch", mock.MatchAny()). AndExitWith(0) agent.CheckAndClose(t) ``` ## Proxy Proxy 是驱动 Mock 的底层机制。 ``` // Compile a proxy for the git command that echos some debug proxy, err := bintest.CompileProxy("git") if err != nil { log.Fatal(err) } // call the proxy like a normal binary go fmt.Println(exec.Command("git", "test", "arguments").CombinedOutput()) // handle invocations of the proxy binary for call := range proxy.Ch { fmt.Fprintln(call.Stdout, "Llama party! 🎉") call.Exit(0) } // Llama party! 🎉 ``` ## 致谢 灵感来自 [bats-mock](https://github.com/jasonkarns/bats-mock) 和 [go-binmock](https://github.com/pivotal-cf/go-binmock)。
标签:EVTX分析, Golang, Mock测试, SOC Prime, 安全编程, 开发工具, 日志审计, 测试工具