【问题标题】:Go: How to unit test a piece of code that works with Mongo collections?Go:如何对一段与 Mongo 集合一起使用的代码进行单元测试?
【发布时间】:2020-01-24 14:31:41
【问题描述】:

我在 Go 中使用 the official Mongo driver。我的代码看起来像这样(为了使示例更简单,省略了错误处理):

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函数进行单元测试?

我浏览了the driver's documentation 并没有找到任何与测试相关的功能/最佳实践。

注意:完整代码可在GitHub 获得。

【问题讨论】:

    标签: mongodb go mongo-go go-testing


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。但我对单元测试特别感兴趣。例如,如果您在 GitHub 上打开原始代码,还有一个错误处理逻辑,可以更好地通过单元测试进行测试。
    • 那么你就必须模拟 Mongo 驱动程序本身。
    猜你喜欢
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多