Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为单元测试模拟DB

如何为单元测试模拟DB
EN

Stack Overflow用户
提问于 2021-07-19 03:47:47
回答 1查看 1.7K关注 0票数 0

我有这样的UserRepo:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type users struct {
   *gorm.DB
}

func NewMySqlUsersRepository(db *gorm.DB) repository.IUsers {
    return &users{
        DB: db,
    }
}

相应方法实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (r *users) Save(user *domain.User) (*domain.User, *errors.RestErr) {
  err := r.DB.Model(&domain.User{}).Create(&user).Error

  if err != nil {
    logger.Error("error occurred when create user", err)
    return nil, errors.NewInternalServerError(errors.ErrSomethingWentWrong)
  }

  return user, nil
}

对于数据库模拟,我使用sqlmock。但是,如何在单元测试中模拟这种方法呢?在Gorm中,如何模拟其他数据库查询?

EN

回答 1

Stack Overflow用户

发布于 2021-07-19 05:28:29

嘲笑围棋是关于围棋接口的。您必须为存储库创建一个接口,并实现interface方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type interface IUserRepository{
     save(user *UserModel) (*userModel, Err)
}

现在,您需要做的就是与用户结构一起创建一个模拟结构。这两个结构都将实现IUserRepository。您还可能希望使用流行的模拟/测试框架(如去-模拟作证 )来创建模拟。

现在,您必须实现一个工厂方法,这样它将根据条件返回mockStruct。您可以使用上下文、env变量或任何其他方式注入条件变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func NewMySqlUsersRepositoryFactory(ctx context.Context, env string, db *gorm.DB) repository.IUsers {
    if env == "test" {
        // This is a mocked struct ...
        return mock.MockUsers{}
    }
     // This is a actual struct... 
    return &users{
        DB: db,
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68439982

复制
相关文章
利用Mockito模拟DB
前两篇文章的主要内容是:为了给执行测试,如何建立数据库表和导入初始数据。这里我们将学习如何利用Mockito框架和一些注解模拟(mock)Repository实例,从而使得测试用例不依赖外部的数据库服务。
阿杜
2018/08/06
2.1K0
利用Mockito模拟DB
Mockito模拟进行单元测试
MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。
chinotan
2022/01/04
7K0
Mockito模拟进行单元测试
单元测试模拟框架:Nsubstitute
     Nsubstitute是一个开源的框架,源码是C#实现的。你可以在这里获得它的源码:https://github.com/nsubstitute/NSubstitute NSubstitute 更注重替代(Substitute)概念。它的设计目标是提供一个优秀的测试替代的.NET模拟框架。它是一个模拟测试框架,用最简洁的语法,使得我们能够把更多的注意力放在测试工作,减轻我们的测试配置工作,以满足我们的测试需求,帮助完成测试工作。它提供最经常需要使用的测试功能,且易于使用,语句更符合自然语言,可
张善友
2018/01/29
1.7K0
Mockito模拟进行单元测试
    MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。
chinotan
2019/07/15
9.5K0
Mockito模拟进行单元测试
[PHP] hyperf单元测试模拟http请求
composer create-project hyperf/hyperf-skeleton
唯一Chat
2021/06/29
1.2K0
Unit Test单元测试时如何模拟HttpContext
参考文章:http://blog.csdn.net/bclz_vs/article/details/6902638
跟着阿笨一起玩NET
2018/09/19
1.5K0
1 秒杀系统模拟基础实现,使用DB实现
业务隔离:将秒杀业务独立出来,尽量不与其他业务关联,以减少对其他业务的依赖性。譬如秒杀业务只保留用户id,商品id,数量等重要属性,通过中间件发送给业务系统,完成后续的处理。
天涯泪小武
2019/01/17
4800
何为真何为假
还记得第一个提出日心说的人是谁么? 没错, 哥白尼. 但是在那个年代, 所有人都认为太阳围绕着地球转的年代. 哥白尼的发现打破了大家的常识, 甚至于有过了很多年, 日心说才逐渐被大众所接受. 即使到了
烟草的香味
2020/06/09
9720
何为http,何为RPC?
RPC(即Remote Procedure Call,远程过程调用)和HTTP(HyperText Transfer Protocol,超文本传输协议)他们最本质的区别,就是RPC主要工作在TCP协议之上,而HTTP服务主要是工作在HTTP协议之上,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹。
Java架构
2019/06/15
1.4K0
【DB笔试面试791】在Oracle中,BBED模拟修复坏块。
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
AiDBA宝典
2020/05/07
5780
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
29.1K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
何为内存溢出,何为内存泄露
内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间。
Java架构
2019/06/15
5.4K0
何为BFC?
何为BFC? BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,内部不会影响外部布局,反之亦然,每个BFC都遵守同一套布局规则。 如何创建BFC? float:left|right position:absolute|fixed display: table-cell|table-caption|inline-block|flex | inline-flex overflow: hidden|scroll|auto BFC有何特性? 内部的Box会在垂直方向,
前端黑板报
2018/01/29
5650
何为实在
image.png 推荐语: 霍金的《大设计》(The Grand Design)与其说是本科普读物,莫如说是相关“实在与终极”的著作。过去几千年间,这个领域更多是哲学家的禁脔。但,二战以降,哲学渐死,已完全跟不上现代科学发展的步伐。忧心于此,霍金此次似乎不得不替哲学家当了回“临时工”。 全书共八章,《存在之谜》、《定律规则》、《何为实在》、《可择历史》、《万物理论》、《选择宇宙》、《表观奇迹》和《伟大设计》,精华是前三章,核心则在《何为实在》。霍金选择了依赖模型的“实在观”:所谓“实在”
腾讯研究院
2018/01/19
9240
何为实在
何为GraphQL?
GraphQL是一种新型的,令人兴奋的,用于特定查询和操作的API。它非常灵活并且有很多好处。 它特别适合以图形和树型为组织的数据。Facebook在2012年研发出了GraphQL并在2015年将其开源。
前端达人
2018/10/18
3.5K1
何为GraphQL?
[大佬] 何为"网络"
1945年,冯诺依曼发明了世界上第一台电子计算机。截止到今天,计算机经过了76年的发展,互联网已把全世界几十亿人所拥有或使用或租用的各级计算机,连接在了一起。同时,也把这么多人的心,局部或全部,给拽进去了互联网内。
科控物联
2022/03/29
2710
首发!DevOps@BOC — 器用之道,如琢如磨
我来自中国银行软件中心的一个开发部门,中国银行软件中心从 2013年开始试点敏捷软件开发以及相关CI、CD等实践,而我们内部真正的提 DevOps 比这个要更晚些。
DevOps时代
2018/10/08
1K0
首发!DevOps@BOC — 器用之道,如琢如磨
走近微服务,第4部分:使用GoConvey进行测试和模拟
应该如何测试微服务?在为这个特定领域制定测试方案时,需要考虑哪些特别的挑战?在本博客系列的第4部分中,我们将一窥究竟。
用户2176511
2018/06/20
3.4K0
走近微服务,第4部分:使用GoConvey进行测试和模拟
如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全
.NET 中提供了一些线程安全的类型,如 ConcurrentDictionary<TKey, TValue>,它们的 API 设计与常规设计差异很大。如果你对此觉得奇怪,那么正好阅读本文。本文介绍为这些非常不确定的行为设计 API 时应该考虑的原则,了解这些原则之后你会体会到为什么会有这些 API 设计上的差异,然后指导你设计新的类型。
walterlv
2023/10/22
1810
何为求解器?
最近学习到的关于求解器的新知识总结。首先求解器是用在数学规划问题中的常见工具,那么问题来了,数学中用到的工具和供应链业务有什么相关呢?我们还要继续再往前走一步,看看数学规划问题能为我们解决些什么业务问题。带着这些疑惑请耐心往下看,文章较长。
Act
2021/07/27
10K2

相似问题

在Java单元测试中模拟Db

12

如何为python单元测试模拟mongodb?

70

如何为单元测试提供模拟筛选器

13

如何为单元测试模拟Azure队列存储?

324

如何为单元测试创建模拟对象

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文