首页 > 后端开发 > Golang > 正文

如何使用 Golang 创建单元测试依赖注入

PHPz
发布: 2024-02-11 15:42:08
转载
401人浏览过

如何使用 golang 创建单元测试依赖注入

php小编柚子为您带来了一篇关于如何使用Golang创建单元测试依赖注入的文章。在软件开发中,单元测试是至关重要的一部分,而依赖注入则是一种常用的设计模式,可以帮助我们更好地进行单元测试。本文将简明扼要地介绍如何使用Golang来实现依赖注入,以便我们能够更轻松地编写可测试的代码。让我们一起来探索吧!

问题内容

例如,我想创建一个用户API 具有这样的依赖注入结构

func Bootstrap(config *BootstrapConfig) {
// setup repositories
userRepository := repository.NewUserRepository(config.Log)
// setup producer
userProducer := messaging.NewUserProducer(config.Producer, config.Log)
// setup use cases
userUseCase := usecase.NewUserUseCase(config.DB, config.Log, config.Validate, userRepository, userProducer)
// setup controller
userController := http.NewUserController(userUseCase, config.Log)
routeConfig := route.RouteConfig{
    App:               config.App,
    UserController:    userController,
}
routeConfig.Setup()
}
登录后复制

然后,我想为用户创建 API 创建一个单元测试,但我不想与数据库进行真正的交互或模拟。由于 userUseCase 需要一个存储库,这意味着我们将为 SaveUserToDB 函数创建一个模拟 userRepository。

使用这样的方法正确吗?

mockRepo.On("SaveUserToDB", mock.Anything, mock.AnythingOfType("*repository.User")).Return(nil)
登录后复制

解决方法

依赖项注入需要实际注入依赖项。 Bootstrap 正在创建其依赖项,因此可以说这不是依赖项注入。如果你在测试中使用了 Bootstrap ,那么这绝对不是依赖注入。

立即学习go语言免费学习笔记(深入)”;

青柚面试
青柚面试

简单好用的日语面试辅助工具

青柚面试 57
查看详情 青柚面试

所以你需要将 func Bootstrap(config *BootstrapConfig) 至少更改为 func Bootstrap(config *BootstrapConfig, userRepository *repository.User)

然后,在您的测试中,您将 mockRepo 传递给 Bootstrap

func Bootstrap(config *BootstrapConfig, userRepository *repository.User) {
    // setup producer
    userProducer := messaging.NewUserProducer(config.Producer, config.Log)
    // setup use cases
    userUseCase := usecase.NewUserUseCase(config.DB, config.Log, config.Validate, userRepository, userProducer)
    // setup controller
    userController := http.NewUserController(userUseCase, config.Log)
    routeConfig := route.RouteConfig{
        App:               config.App,
        UserController:    userController,
    }
    routeConfig.Setup()
}

func TestFoo(t *testing.T) {
    mockRepo := mocks.NewUserRepository(config.Log)
    Bootstrap(config, mockRepo)
    mockRepo.On("SaveUserToDB", mock.Anything).Return(nil)
    …
}
登录后复制

Bootstrap 不应创建任何依赖项,因此您应该将其应用于 userProduceruserUseCase

以上就是如何使用 Golang 创建单元测试依赖注入的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:stackoverflow网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号