我要测试,函数Index.getInitialProps = ({ reduxStore }) => {
reduxStore.dispatch(toggleType('woman'));
return {
namespacesRequired: ['common'],
menu: reduxStore.getState().app.menu,
};
};
执行二进制文件并正确处理输出。
为此,我最初的想法是编译原始代码,例如:
callProgram
我查看了 build 命令(package mytest
import (
"testing"
)
const (
binary_code = `
package main
func main() {
// Glorious processing ...
}
`
)
func TestCall(t *testing.T) {
p := buildTestProgram(binary_code, "~/testbinary")
defer p.Delete()
callProgram("~/testbinary")
}
),它的实现非常简单。问题在于,它位于runBuild
命名空间中,而internal
似乎没有公开任何调用cmd/go
或类似方法的方法。
所以我的问题是如何测试某种二进制文件,以及如何与托管系统进行尽可能少的交互。
是的,我可以下载预编译的二进制文件,执行runBuild
等,但是我将非常高兴能够将潜在错误/复杂性的可能性降到最低,并且尽可能地便携。
答案 0 :(得分:1)
没有公共的编译器API。
测试应用程序最简单的方法是在系统上调用/运行现有的二进制文件。
如果您不想依靠它,另一种选择是让您的测试将二进制文件创建/写入一个临时文件夹,测试您的功能,然后删除该临时文件。使用ioutil.TempFile()
函数可以轻松/自动完成此操作。
创建此临时二进制文件可能是Go编译过程,也可能不是。由于这是Go测试的一部分,因此Go SDK应该已经安装在您的系统中,因此调用go
应该没有问题。
您的测试还可能包含一个很小的,可运行的可执行文件的内容,测试可以将该文件“转储”到一个临时文件中。这样的小二进制文件可能只有100个字节,例如,请参见Smallest x86 ELF Hello World。有关如何将数据绑定到Go应用中,请参见What's the best way to bundle static resources in a Go program?