执行测试时找不到Go模块包[关闭]

Posted

技术标签:

【中文标题】执行测试时找不到Go模块包[关闭]【英文标题】:Go module package not found when executing the tests [closed] 【发布时间】:2021-11-16 06:51:13 【问题描述】:

我知道我缺乏对 Go 如何寻找包的基本理解,但让我强调一下我的想法,如果需要 - 你可以投反对票。

这是我的 Go 模块结构:

├── go.mod

├── gopher.json

├── main.go

├── story.go

├── 模板.html

└── 测试

   ├── cyow_test.go
   └── gopher.json

除了应该放置测试的简单、专用的 /tests 目录之外,别无其他。

这是我的 cyow_test.go 文件:


import (
    "io/ioutil"
    "story"
    "testing"
)

func TestUnmarshallOverStoryStruct(t *testing.T) 
    t.Parallel()
    content, fileError := ioutil.ReadFile("gopher.json")
    if fileError != nil 
        t.Error("The file for Chapter is not found.")
    

    story := story.Story
    fmt.Println("Story has been initialized")

    err := json.Unmarshal([]byte(content), &story)
    fmt.PRintln("Json unmarshall statement has been executed.")
    if err != nil 
        panic(err)
    

您可以忽略该功能,它主要用于一些学习目的。重要的部分是我依赖于一个故事包,它已被声明为模块的一部分。

当我进入 /tests 并运行“go test”时,我收到:

cyow_test.go:5:2: package story is not in GOROOT (/usr/local/go/src/story)

我在模块根目录中运行了“go mod tidy”,我的简单问题是:

    为什么 Go 默认找不到包?它是模块的一个包的一部分,所以它应该是原生的——这是我的假设。 这是否意味着引用包的唯一方法(甚至在您的模块内部)是通过远程 repo URL 引用它们,例如 github.com ... 或者最终只是将包复制到 /usr/local/go /src(一点也不友好)

【问题讨论】:

一个目录包含一个包,story.go不能是另一个包。如果您在新目录中创建story,则它会被导入为modulename/story。我建议您尝试入门教程,例如 Create a Go module 和 How to Write Go Code 【参考方案1】:

你的假设是错误的。导入包的方式是“模块/包”。模块名称不必包含存储库名称。不要将包复制到源目录。

【讨论】:

以上是关于执行测试时找不到Go模块包[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

“错误:在 react-redux 项目中安装节点包时找不到模块'internal/util/types'”

使用 typescript/mocha 进行单元测试时找不到模块

Gradle 在执行自定义任务时找不到模块的输出 jar

测试套件无法运行在 vue3 中使用 jest 时找不到模块'vue-template-compiler

springboot聚合工程(多模块)install时找不到包的问题及解决方案

错误:在运行排毒测试时找不到模块“mocha/lib/cli/run-option-metadata”