任何对foo.go+有用的替代方案;foo_test.go

任何对foo.go+有用的替代方案;foo_test.go,go,testing,Go,Testing,对于Go代码库的单元测试,除了foo.Go和foo\u测试.Go模式之外,是否有任何合理的替代方案?唯一的“担忧”是将所有这些额外文件放在文件系统的同一位置。将测试文件放在中心位置可能很好,但由于Go软件包的工作方式,这可能不起作用 go test some/path/mypackage 然后go工具将在包的目录中查找测试文件。如果您将测试文件放在其他地方,go工具将无法在其他文件夹中找到它们(甚至不会查找它们),因此它们将不会运行/执行 单凭这一论点就足以不把它们放在其他地方 文件包: 要编

对于Go代码库的单元测试,除了
foo.Go
foo\u测试.Go
模式之外,是否有任何合理的替代方案?唯一的“担忧”是将所有这些额外文件放在文件系统的同一位置。将测试文件放在中心位置可能很好,但由于Go软件包的工作方式,这可能不起作用

go test some/path/mypackage
然后go工具将在包的目录中查找测试文件。如果您将测试文件放在其他地方,go工具将无法在其他文件夹中找到它们(甚至不会查找它们),因此它们将不会运行/执行

单凭这一论点就足以不把它们放在其他地方

文件包:

要编写新的测试套件,请创建一个文件,该文件的名称以_test.go结尾,其中包含TestXxx函数,如下所述将该文件与正在测试的文件放在同一个包中。

“go-test”命令期望在“*\u test.go”文件中找到与被测包相对应的测试、基准测试和示例函数

一些注意事项:

  • go工具只希望测试文件位于同一文件夹中,但您可以随意命名它们,只需使用
    \u test.go
    后缀即可。例如,您可以使用
    foo.go
    ,也可以使用
    my_test.go
    进行测试。也不要求每个
    都有一个单独的测试文件。转到
    源文件,您可以将所有测试放在一个测试文件中,并且您可能拥有比源文件更多的测试文件

  • 在测试文件中,您可以使用相同的包名,然后将测试文件与包一起编译,以便测试可以访问包中的所有内容(包括未报告的标识符)(白盒测试)。您可以使用后缀为
    \u test
    的包名,在这种情况下,这些文件中的测试将只能访问包的导出标识符(黑盒测试)。请在此处阅读更多信息:


您不必担心
.go
文件的数量。即使包中有一千个
.go
文件,To go工具也能处理。虽然在大多数情况下,如果一个包中有许多
.go
文件,这表明该包做得太多了,应该将其分解为多个更小的包。

否。这就是go项目的结构。文件数量是个问题吗?我的老板表示担心可能有更好的方法,所以这是我告诉老板没有lulz:)测试文件可以放在任何地方,但是如果它不在同一个包中,那么你只能进行黑盒测试。最佳实践通常是两者兼而有之,具体取决于您正在测试的内容。但即使是黑盒测试文件也通常放在同一个目录中,即
foo_test
包中,以支持黑盒测试,同时保持测试与测试代码一起组织。谢谢。我想做你提到的事。为每个包创建一个测试文件。我想将文件命名为foo/.foo\u test.go或foo/\u foo\u test.go,但golang不允许我以点或下划线开始文件。当我运行
go test
=>
无法加载package:package main:no go files in(folder)
时,我遇到了这个错误,所以这在idk中有点蹩脚,知道解决方法吗?@MrCholo以下划线开头的文件和文件夹被go工具故意忽略。解决办法?只是不要以下划线开头。是的,下划线和点都会被忽略。在我的例子中使用点会很好,但我会使用∫∫∫∫ 而不是现在。