You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助主项目根目录vendor运行本地Go模块MyExporter的测试?

问题描述

项目目录结构

bitbucket.com
|__agent
     |__Exporter
     |     |__MyExporter
     |            |__factory.go
     |               factory_test.go
     |               go.mod
     |__Runner
     |     |__main.go
     |        main_test.go
     |__Vendor
     |     |__bitbucket.com/agent/exporter/myexporter
     |                   |__factory.go
     |__go.mod

模块配置

  • MyExporter的go.mod:
module bitbucket.com/agent/exporter/myexporter
  • 主模块agent的go.mod:
module bitbucket.com/agent

require (
    bitbucket.com/agent/exporter/myexporter
)

replace bitbucket.com/agent/exporter/myexporter => ./exporter/myexporter

遇到的问题

  • 执行go test -mod=vendor ./...仅运行main_test.go的测试,不执行MyExporter的测试;
  • 执行go test -mod=vendor exporter/myexporter报错:package exporter/myexporter is not in GOROOT;
  • 执行go test -mod=vendor bitbucket.com/agent/exporter/myexporter提示无测试文件;
  • 切换到Exporter/MyExporter目录执行go test ./...正常,但执行go test -mod=vendor ./...因vendor在agent根目录失败;
  • 执行go test -mod=vendor ./exporter/myexporter/报错:main module (bitbucket.com/agent) does not contain package bitbucket.com/agent/exporter/myexporter。

需求:借助agent根目录的Vendor目录运行MyExporter的测试,不在MyExporter内创建独立vendor目录。


解决方案

1. 修正路径大小写匹配问题

主模块go.mod中的replace指令路径与实际目录结构大小写不匹配(实际目录为Exporter/MyExporter,指令中写的是./exporter/myexporter),这是核心问题之一。

修改主模块go.mod的replace指令:

replace bitbucket.com/agent/exporter/myexporter => ./Exporter/MyExporter

2. 更新Vendor目录包含测试相关文件

默认go mod vendor不会将项目自身的测试文件和测试依赖加入vendor目录,需要添加-include-test参数生成完整的vendor内容:

在agent根目录执行:

go mod vendor -include-test

执行后,Vendor/bitbucket.com/agent/exporter/myexporter目录下会包含factory_test.go文件。

3. 执行MyExporter的测试

在agent根目录执行以下命令即可借助主模块的vendor目录运行MyExporter的测试:

go test -mod=vendor bitbucket.com/agent/exporter/myexporter

备选方案(无需切换目录)

如果不想修改vendor目录,也可以直接在MyExporter目录下指定使用主模块的go.mod和vendor:

切换到Exporter/MyExporter目录后执行:

go test -mod=vendor -modfile=../../go.mod ./...

该命令会强制使用agent根目录的go.mod配置和vendor依赖,无需在子模块内创建vendor。


内容的提问来源于stack exchange,提问作者Ruturaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 14:52:44