如何在测试中构建程序

时间:2019-05-20 10:07:02

标签: go build

我要测试,函数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等,但是我将非常高兴能够将潜在错误/复杂性的可能性降到最低,并且尽可能地便携。

1 个答案:

答案 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?