buildkite/bintest
GitHub: buildkite/bintest
一个 Go 测试库,用于生成可被实时编排和断言的 mock 可执行文件,解决外部命令调用的测试难题。
Stars: 11 | Forks: 0
# Bintest
[](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, 安全编程, 开发工具, 日志审计, 测试工具