登录
首页 >  Golang >  Go问答

如何在构建Go项目时排除mock包?

来源:stackoverflow

时间:2024-03-01 19:45:24 419浏览 收藏

Golang不知道大家是否熟悉?今天我将给大家介绍《如何在构建Go项目时排除mock包?》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

问题内容

如您所知,当构建 go 项目时,_test.go 会被忽略,并且模拟包仅由 _test.go 文件导入,因此如果这些文件不包含在构建的项目中,为什么要简单地包含模拟包。 所以想知道如何在构建项目时忽略其中的文件。

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

还尝试使用构建约束

//go:build ignore

出现相同的错误“mockstruct 未由包模拟声明”

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


正确答案


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

试试这个例子:

  • 构建以下代码;
  • 检查其二进制大小;
  • 删除 sample_test.go 文件;
  • 再次构建并检查其二进制大小;

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

sample.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()
}

sample_test.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)
}

到这里,我们也就讲完了《如何在构建Go项目时排除mock包?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>