我们提供了包含大量复杂测试的软件包。作为测试套件的一部分,它们可以在构建等上运行。
func TestFunc(t *testing.T) {
//lots of setup stuff and defining success conditions
result := SystemModel.Run()
}
现在,对于这些测试之一,我想介绍一些前端,这使我可以调试一些东西。它实际上不是测试,而是调试工具。为此,我只想运行相同的测试,但要使用Builder模式:
func TestFuncWithFrontend(t *testing.T) {
//lots of setup stuff and defining success conditions
result := SystemModel.Run().WithHTTPFrontend(":9999")
}
然后,只有当我从前端通过HTTP发送信号时,测试才会开始。基本上WithHTTPFrontend()
只是在前端的HTTP调用中等待一个通道。
这当然会使自动化测试失败,因为将不会发送任何此类信号并且执行将挂起。
我不能仅将软件包重命名为main
,因为该软件包有15个文件,它们在系统的其他位置使用。
同样,我还没有找到一种仅按需运行测试的方法,同时又将其从测试套件中排除,因此TestFuncWithFrontend
仅从命令行运行-我不在乎是否使用{{1 }}或go run
等。
我也想到过go test
,但是测试产生了太多的输出,它是无用的,而且如果没有定义ExampleTestFunc()
,示例将无法运行。
不幸的是,测试需要在(私有,即小写)程序包级别上有很多初始化代码。因此,我不能只创建一个子包Output: ...
,因为很多东西将无法访问。
看来我有三个选择:
使用大写字母导出所有这些初始化变量和代码,以便可以从子主程序包中使用它
复制整个代码。
将测试移至子包main
中,然后使用main
进行Frontend测试,使用func main()
进行常规测试,这必须导入父包中的一些内容。
我想避免第二个选择……第一个选择更好,但是恕我直言也不好。我想我会第三名,但是...
我还缺少其他选择吗?
答案 0 :(得分:1)