在GO单元测试中本系列第二部分的模拟测试中,我们介绍了使用CRUD操作使用CRUD进行模拟测试的方法,但它仅解释了如何执行原始SQL的NQL模拟测试。
在实际开发方案中,我们的项目通常使用ORM而不是本机来完成数据库操作。在使用ORM工具的许多方案中,您还可以使用库模拟数据库操作进行测试。今天,我以Gorm为例解释了如何测试项目中的ORM数据库操作。
为了足够真实,我使用了我在2020年更新的“ Go Web编程简介”项目的示例,向您展示了如何使用Gorm的DAO层逻辑进行模拟测试。
这里使用的GORM版本是1.x,在2.x版本中可能不兼容
在此示例中,我们有一个带有用户表的
以及使用用户的一些DAO函数:
接下来,我们使用工具为这些DAO功能进行模拟测试。
首先,我们需要进行测试的初始化,主要是设置模拟数据库连接,因为三种方法需要模拟测试。最简单的方法是每次以三种方法初始化模拟的模拟数据库连接,但是Soit有点愚蠢。在这里,我将向所有人介绍另一个技巧。
GO测试支持在软件包优先级中具有功能,可以在此处处理所有测试的初始化工作。
以下是我们测试的初始化。
准备工作已经完成,模拟测试正式进行下面进行。
首先执行Gorm创建方法的模拟测试。
由于SQLMock使用QueryMatchEqual匹配设备,因此必须准确地将SQL语句准确地匹配SQL(包括符号和空格)才能执行。
如何获得此SQL?实际上,我们只是首先编写SQL并执行测试。在错误消息中,我们将通知SQL,Gorm在编写表时确实希望执行。您也可以通过Gorm提供的方法将其获取。
例如,在下面运行创建用户操作,Gorm将打印执行的语句。
我们执行此测试
可以看出,测试功能已成功执行。我们还可以故意将SQL更改为反向测试。这将留给您自己联系。结合阳性和反向单元测试的测试。
Gorm查询操作的模拟测试与Create相似。
我在这里没有进行演示,我很想拿代码并尝试。
我没有测试GORM的更新操作。
运行测试后,将会有以下错误消息:
GORM将自动更新更新的_AT字段作为当前时间,Gorm与time.now(now()参数不一致的时间(Milliseconds的差距不好)。
目前,无法模拟测试Gorm的更新。除非使用GORM的EXEC方法直接执行要更新的SQL,否则它将失去使用Orm.guide IT的含义。
该内容对ORM的模拟测试进行了解释。当我研究GO单元测试时,这也是我的想法。我希望我学到的这些技能可以在项目中真正使用。
因为文章中的示例是我以前的GO Web编程教程中项目中的测试。我还将源代码打包到GO Web编程项目。可以获得公共帐户私人消息GOHTTP15。
如果您觉得有用,可以喜欢它,观看并与更多的人分享,感谢您的支持,您将在《时代》中进行介绍,以介绍使用GO 1.18 Fuzing测试。
GO数据库的单元测试架测试
原始:https://juejin.cn/post/70957364636932110