为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
qq_花开花谢_0 2022-11-23 20:33:55

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

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

还尝试使用构建约束

//go:build ignore

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

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


查看完整描述

1 回答

?
交互式爱情

TA贡献1433条经验 获得超3个赞

如果您的 mock 仅用于测试文件,则在构建项目时不会导入它。Go 编译器在构建时不包含测试及其依赖项。

以此为例:

  • 构建以下代码;

  • 检查其二进制大小;

  • 删除sample_test.go文件;

  • 再次构建并检查其二进制大小;

测试前后的大小应该没有什么不同,这证明构建中没有包含测试的任何内容。

示例.go

package main


import "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()

}

样本测试.go


package main


import (

    "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)

}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信