您将如何单元测试一种方法,其唯一目的是进行数据库调用



我有类似的方法:

func (alert *Alert) CreateAlert(db *mgo.Database) error {
    return db.C("alerts").Insert(&alert)
}

我应该如何进行单位测试?如果我只是调用此方法进行Uni测试,那么我将必须创建呼叫的测试DB。我以某种方式觉得这将是集成测试的一部分,因为我们正在呼吁DB。

如果我模拟了DB对象,则将永远不会测试实际实现。

我应该对此进行测试吗?作为编写单元测试的主要目标,是否将数据插入DB,并且此功能已经在库本身中进行了测试,在我的情况下,MGO库。

请分享您对单元测试上述情况最佳方法的想法。

您将用模拟对其进行单位测试,以便未调用数据库,但仅对您的功能进行了测试。

有许多不同的方法来模拟数据库,因此我不会详细介绍,但是对于如此小的功能的单位测试也很小。您真正要测试的只是:

  1. 模拟以预期格式接收预期数据(即,它接收到&alert值,传递给其Insert()方法吗?)
  2. 模拟的返回值(一个error)返回到函数的呼叫者

特别是在此功能的单元测试中,您将检查:

  • SQL符合语法期望(您的功能无法控制SQL,此类测试确实是在测试您的数据层/ORM)
  • 插入如预期的 - 这将在您的数据库中测试
  • 该函数的呼叫者具有适当的数据库权限(这再次是测试您的数据层和/或数据库)

最新更新