2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
非 Go 文件和文件不會(huì)編譯到模塊中。若要發(fā)布文件,請(qǐng)將其重命名為文件,并導(dǎo)出要向客戶端公開的變量和函數(shù)。_test.go_test.go.go
對(duì)于非 Go 文件,從 Go 1.16 開始,請(qǐng)嵌入它們:
package mycompany.com/common/testing
import _ "embed"
//go:embed responses/api.response.json
var MockApiJsonResponse []byte // or string
其中,目錄樹如下所示:
testing
└── testing.go
└── responses
└── api.response.json
然后,您的客戶端將能夠像往常一樣引用這些導(dǎo)出的變量和函數(shù):
package mycompany.com/service
import (
"testing"
common_testing "mycompany.com/common/testing"
)
func TestThings(t *testing.T) {
mock := common_testing.MockApiJsonResponse
// ...
}

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
OP 答案!看來我的問題是我的軟件包中有一個(gè)導(dǎo)入的實(shí)用程序fn,來自它自己的內(nèi)部testing.go文件,這意味著它的init()函數(shù)正在運(yùn)行并污染上游的pkg測(cè)試運(yùn)行。apitest
我最初的方法很合理,但是在我刪除了內(nèi)部測(cè)試后,erptest pkg不再下載到上游服務(wù)。我更改了結(jié)構(gòu)以引用根目錄,如下所示,這恢復(fù)了 apitest pkg 的 upsrtream 下載:
/my-api-pkg
├── go.mod
└── /api
└── api.go
└── api_test.go // <= we currently access .json files here like utiltest.apiResponse []byte
└── /apitest // <= sub pkg that contains testing methods and .json accessors
└── apitest.go
└── /testing // <= moving the files here re-enabled download and access or erptest code to upstream consumers
└── /files
└── /api.response.json
這是我的apitest pkg導(dǎo)出的基本結(jié)構(gòu),以便通過以下方式訪問上游的文件(作為[]字節(jié))apitest.Domain().GetApiRoute1.Res1
// accessor
type domainAccessor struct {
GetApiRoute1 getApiRoute1
...
}
func DomainAccessor() domainAccessor {
return domainAccessor{
GetApiRoute1: _GetApiRoute1,
...
}
}
// individual file accessors for each route
type getApiRoute1 struct {
Res1 []byte
Res2 []byte
}
var _GetApiRoute1 = getApiRoute1{
Res1: loadFile("testing/files/api/v1/domain/getApiRoute1.res.json"),
Res2: loadFile("testing/files/api/v1/domain/getApiRoute2.res.json"),
}
加載文件 fn 將文件讀取到 []byte
func loadFile(filepath string) []byte {
dir := ""
_, filename, _, ok := runtime.Caller(0)
if ok {
dir = path.Join(path.Dir(filename), "..", "..", "..")
}
fullPath := path.Join(dir, filepath)
body, err := ioutil.ReadFile(fullPath)
if err != nil {
log.Println("Error apitest.loadFile: unable to read file", err)
panic(err)
}
return body
}
- 2 回答
- 0 關(guān)注
- 100 瀏覽
添加回答
舉報(bào)