亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中為允許單元測試的休息服務設置 Mongo DB?

如何在 Go 中為允許單元測試的休息服務設置 Mongo DB?

Go
慕雪6442864 2023-06-19 15:30:13
我正在使用 MongoDB 和 mux 路由器設置休息服務。我遇到了關于如何最好地設置它以允許在單獨的數據庫中進行單元/集成測試的問題。我曾嘗試在 Init() 函數中設置數據庫,但這在嘗試使用測試數據庫設置單元測試時給我帶來了問題。以下是我現在所處位置的一些示例。我試圖在發布之前使用一種方法連接到數據庫,因此在我的測試中我可以連接到不同的測試數據庫。type user struct {    name string `json:"name"`    age  int    `json:"age"`}type database struct {    db *mongo.Database}func ConnectToDB() (*database, error) {    client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))    if err != nil {        return nil, err    }    if err := client.Connect(context.Background()); err != nil {        return nil, err    }    database := &database{        db: client.Database("PMBaseGo"),    }    return database, nil}func PostUser(w http.ResponseWriter, r *http.Request) {    w.Header().Set("Content-Type", "application/json")    //Retrieving request body    var user user    _ = json.NewDecoder(r.Body).Decode(&user)    //Posting Company.    err := PostUserToDB(user)    //Error Handling    if err != nil {        fmt.Println(err)        w.WriteHeader(500)    }}func (d *database) connPostUserToDB(user user) error {    _, err := d.db.Collection("companies").InsertOne(context.Background(), user)    if err != nil {        return err    }    return nil}func main() {    _, _ = ConnectToDB()    r := mux.NewRouter()    r.HandleFunc("/user", PostUser).Methods("POST")    fmt.Println("Application Running...")    log.Fatal(http.ListenAndServe("localhost:8081", r))}我現在遇到的問題是試圖調用函數PostUserToDB中的方法PostUser。我開始認為問題在于我將如何連接到數據庫。
查看完整描述

1 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

使您的處理程序成為包含處理程序依賴項的結構上的方法:


type server struct {

    srv *service

}


type service struct {

    db *mongo.Database

}


func (s *server) PostUser(w http.ResponseWriter, r *http.Request) {

    // Create user struct from request data...


    if err := s.srv.CreateUser(u); err != nil {

        // Error response.

    }


    // Success response.

}


func (s *service) CreateUser(u *user) error {

    // ...

    _, err := d.db.Collection("foo").InsertOne(r.Context(), user)

    return err

}


func main() {

    s := &server{

        srv: &service{

            db: getMongoDatabase(),

        },

    }


    r := mux.NewRouter()

    r.HandleFunc("/user", s.PostUser).Methods("POST")


    log.Fatal(http.ListenAndServe("localhost:8081", r))

}

在您的測試代碼中,您可以簡單地注入一個不同的數據庫,讓您的測試在該數據庫上運行。


查看完整回答
反對 回復 2023-06-19
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號