我正在使用 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。
我开始认为问题在于我将如何连接到数据库。
呼啦一阵风
相关分类