Sasha Shpota
Sasha Shpota

Reputation: 10310

Go: How to unit test a piece of code that works with Mongo collections?

I am using the official Mongo driver for Go. My code looks like this (omitted error handling in order to make the example simpler):

type DB struct {
    collection *mongo.Collection
}

func (db DB) GetUsers() []*User {
    res, _ := db.collection.Find(context.TODO(), bson.M{})
    var users []*User
    res.All(context.TODO(), &users)
    return users
}

Question: How to unit test the GetUsers function?

I went through the driver's documentation and didn't find any testing related functionality/best practices.

Note: The full code is available on GitHub.

Upvotes: 1

Views: 2893

Answers (1)

Adrian
Adrian

Reputation: 46532

You can't unit test connectivity to a database, by definition - that would be an integration test. To my mind, this method is too simple to bother testing with a mock MongoDB; instead, the most value would probably be from a combination of:

  1. A mock DB type that consumers can use for their unit tests without hitting MongoDB.
  2. An integration test of the DB type itself, that hits a real test Mongo database - this could be a test database created and filled by the test suite, and destroyed after tests are completed (which would be my recommendation).

Upvotes: 4

Related Questions