我的應用程式主要由使用mongo-go-drive包來往/從 MongoDB 的 CRUD 組成。此函式是 gRPC 服務器服務之一,它所做的只是呼叫資料庫方法action.GetProducts(ctx)并回傳*mongo.cursor. 然后對結果進行解碼。對于每個檔案,我將檔案內容放入一個單一的產品結構中,然后將其附加到產品切片(該GetProductsResponse結構是使用 gRPC 原型制作的repeated GetProductResponse)。將所有產品附加到 后GetProductsResponse,我將回應回傳給 gRPC 客戶端。
我也是一般測驗的新手,我應該如何分解函式并進行單元測驗的模擬(如何模擬游標?)?是否有必要首先對函式進行單元測驗,即使它所做的只是附加結果,還是我應該直接進行集成測驗并跳過單元測驗,因為它涉及資料庫 I/O?
func (s *Server) GetProducts(ctx context.Context, in *pb.EmptyRequest) (*pb.GetProductsResponse, error) {
cursor, err := action.GetProducts(ctx)
if err != nil {
return nil, err
}
products := pb.GetProductsResponse{}
res := model.Product{}
for cursor.Next(ctx) {
// Convert document to above struct
err := cursor.Decode(&res)
if err != nil {
return nil, fmt.Errorf("failed to decode document: %v", err)
}
product := &pb.GetProductResponse{ProductId: res.Product_id.Hex(), Name: res.Name, Price: res.Price, Qty: int32(res.Qty)}
products.Products = append(products.Products, product)
}
return &products, nil
}
uj5u.com熱心網友回復:
如果您與資料庫互動不再是單元測驗,因為您正在與另一個外部系統集成。
無論如何,我使用這種方式定義我的“存盤庫”層函式:
package repo
var FetchUserById = func(id string) (*model.User, error){
// here the real logic
return user, err
}
然后,當我必須測驗我的“服務”層邏輯時,我會以這種方式模擬整個“存盤庫”層:
repo.FetchUserById = func(id string) (*model.User, err) {
return myMockedUser, nil
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/402824.html
標籤:
