Я настраиваю службу отдыха на ходу, используя MongoDB и мультиплексорные маршрутизаторы.Я сталкиваюсь с вопросами о том, как лучше настроить это, чтобы позволить модульное / интеграционное тестирование в отдельной базе данных.
Я попытался настроить базу данных в функции 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
функции.
Я начинаю думать, что проблема заключается в том, как я собираюсь подключиться к БД.