构建go项目时如何忽略模拟包?

如您所知,在构建 go 项目时会忽略 _test.go,而 mock 包仅由 _test.go 文件导入,因此如果这些文件未包含在构建的项目中,为什么只包含 mock 包。所以想知道如何在构建项目时忽略其中的文件。

尝试将后缀 _test.go 添加到 mock 包中的文件,但在使用时出现错误“MockStruct not declared by package mock”。

还尝试使用构建约束

//go:build ignore

得到同样的错误“MockStruct 不是由包 mock 声明的”

我在这里错过了什么吗?使用构建约束是唯一的方法吗?


qq_花开花谢_0
浏览 98回答 1
1回答

交互式爱情

如果您的 mock 仅用于测试文件,则在构建项目时不会导入它。Go 编译器在构建时不包含测试及其依赖项。以此为例:构建以下代码;检查其二进制大小;删除sample_test.go文件;再次构建并检查其二进制大小;测试前后的大小应该没有什么不同,这证明构建中没有包含测试的任何内容。示例.gopackage mainimport "fmt"type SampleInterface interface {    DoSomething()}type Sample struct {    Name string}func main() {    s := Sample{}    CallDoSomething(&s)}func (s *Sample) DoSomething() {    fmt.Println("Do Something implementation ", s.Name)}func CallDoSomething(si SampleInterface) {    si.DoSomething()}样本测试.gopackage mainimport (    "fmt"    "testing")type sample_mock struct {    Name string}func (s *sample_mock) DoSomething() {    fmt.Println("Do Something implementation", s.Name)}func TestCallDoSomething(t *testing.T) {    s := sample_mock{        Name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",    }    CallDoSomething(&s)}
打开App,查看更多内容
随时随地看视频慕课网APP