第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何與消費(fèi)者分享Golang包測(cè)試數(shù)據(jù)文件?

如何與消費(fèi)者分享Golang包測(cè)試數(shù)據(jù)文件?

Go
郎朗坤 2022-08-24 20:12:22
我們創(chuàng)建了一個(gè)私有 go 庫(實(shí)用工具包),用于在服務(wù)之間共享通用 API 方法和業(yè)務(wù)邏輯。在實(shí)用程序包中,我們?cè)凇?json”文件中有幾十個(gè)模擬JSON響應(yīng),用于模擬API測(cè)試。使用此實(shí)用程序包的服務(wù)也希望訪問相同的模擬文件,因?yàn)樗鼈円蕾囉谙嗤哪M API 響應(yīng)來測(cè)試各種內(nèi)部業(yè)務(wù)邏輯。有沒有辦法通過一些相對(duì)文件路徑或預(yù)編譯它們(字節(jié)或字符串)來共享這些文件,以允許使用者測(cè)試在通過標(biāo)準(zhǔn)pkg變量或方法導(dǎo)入后引用相同的.json文件(文件路徑或數(shù)據(jù))?go get github.com/whatever/utility-library理想情況下,使用者測(cè)試可以通過子包(如“http/httptest”)訪問這些文件,然后在自己的模擬服務(wù)器(如 or 等)中引用內(nèi)部 .json 文件。我們希望繼續(xù)將模擬響應(yīng)存儲(chǔ)在同一實(shí)用程序模塊內(nèi)的 .json 文件中,但只需將它們公開給使用者測(cè)試文件,嚴(yán)格用于測(cè)試目的。httptest.GetBusinessObject.Response []byteResponseFilePath stringmy-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        └── responses            └── api.response.jsonmy-service-pkg├── go.mod├── server.go├── server_test.go└── sub-pkg    └── subpkg.go    └── subpkg_test.go // <= want to access utiltest.apiResponse []byte for api mocks here
查看完整描述

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

    // ...

}


查看完整回答
反對(duì) 回復(fù) 2022-08-24
?
紅顏莎娜

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

}


查看完整回答
反對(duì) 回復(fù) 2022-08-24
  • 2 回答
  • 0 關(guān)注
  • 100 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)