1

我正在使用Go的官方 Mongo 驱动程序。我的代码看起来像这样(为了使示例更简单,省略了错误处理):

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
}

问题:如何对GetUsers功能进行单元测试?

我浏览了驱动程序的文档,没有找到任何与测试相关的功能/最佳实践。

注意:完整代码可在GitHub上找到。

4

1 回答 1

3

根据定义,您不能对与数据库的连接进行单元测试——这将是一个集成测试。在我看来,这种方法太简单了,无法使用模拟 MongoDB 进行测试;相反,最大的价值可能来自以下组合:

  1. 一种模拟DB类型,消费者可以在不使用 MongoDB 的情况下将其用于单元测试。
  2. 类型本身的集成测试DB,它命中了一个真正的测试 Mongo 数据库——这可能是一个由测试套件创建和填充的测试数据库,并在测试完成后销毁(这是我的建议)。
于 2020-01-24T14:48:00.073 回答