Cobra + Viper Golang 如何测试子命令?

2024-01-11

我正在使用 Go 开发一个网络应用程序。到目前为止一切顺利,但现在我将 Wercker 集成为 CI 工具并开始关心测试。但我的应用程序严重依赖 Cobra/Viper 配置/标志/环境变量方案,并且我不知道如何在运行测试套件之前正确初始化 Viper 值。任何帮助将非常感激。


当我使用 Cobra/Viper 或 CLI 帮助程序的任何其他组合时,我的方法是让 CLI 工具运行一个函数,其唯一目的是获取参数并将它们传递给另一个将执行实际工作的方法。

这是一个使用 Cobra 的简短(且愚蠢)示例:

package main

import (
        "fmt"
        "os"

        "github.com/spf13/cobra"
)

func main() {
        var Cmd = &cobra.Command{
                Use:   "boom",
                Short: "Explode all the things!",
                Run:   Boom,
        }

        if err := Cmd.Execute(); err != nil {
                fmt.Println(err)
                os.Exit(-1)
        }
}

func Boom(cmd *cobra.Command, args []string) {
        boom(args...)
}

func boom(args ...string) {
        for _, arg := range args {
                println("boom " + arg)
        }
}

在这里,Boom功能很难测试,但是boom一个很容易。

你可以看到另一个(非愚蠢的)例子here https://github.com/elwinar/rambler/blob/master/apply.go(以及相应的测试here https://github.com/elwinar/rambler/blob/master/apply_test.go).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cobra + Viper Golang 如何测试子命令? 的相关文章

  • 如何测试抽象类的受保护抽象方法?

    我一直在研究测试名为的抽象类的最佳方法TabsActionFilter 我保证继承自的类TabsActionFilter将有一个名为GetCustomer 在实践中 这种设计似乎效果很好 我遇到的一些问题是弄清楚如何测试OnActionEx
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 无需时间即可生成随机字符串?

    我知道如何使用 Runes 和播种 rand Init 在 go 中生成随机字符串time UnixNano 我的问题是 是否可以 使用 stdlib 在不使用当前时间戳 安全 的情况下播种 rand 此外 我问 因为仅仅依靠时间来为敏感操
  • Golang 优雅地关闭 HTTP 服务器并进行错误处理

    我正在让我的 HTTP 服务器正常关闭 我从帖子中获取了提示here https stackoverflow com questions 39320025 how to stop http listenandserve 并且到目前为止已经像
  • Go中如何从json字符串中获取键值

    我想尝试从 Go 中的 JSON 获取键值 但我不确定如何操作 我已经能够使用 simplejson 读取 json 值 但是我无法找到如何获取键值 有人能指出我正确的方向和 或帮助我吗 谢谢你 您可以通过执行以下操作来获取 JSON 结构
  • Go中如何自定义http.Client或http.Transport超时重试?

    我想实现一个自定义http Transport对于标准http Client 如果客户端超时 它将自动重试 附 由于某种原因 习俗http Transport is a 一定有 我已经查过了hashcorp go retryablehttp
  • 为什么奇数的切片容量与偶数的切片行为不同

    我注意到 当容量为奇数时 切片的容量会以不同的方式表现 更具体地说 当向切片添加元素时 切片的容量为doubled当原始容量为偶数时 但当原容量为奇数时 容量为增加一 然后加倍 例子 s make int 28 28 s append s
  • 为什么结构中“[0]byte”的位置很重要?

    0 byte在golang中不应该占用任何内存空间 但这两个结构体的大小不同 type bar2 struct A int 0 byte type bar3 struct 0 byte A int 那么为什么这个位置 0 byte这里重要吗
  • 我怎么知道我的所有 goroutine 确实正在使用 golang 的同步包等待一个条件

    我有一个应用程序 我正在创建多个 goroutine 来同时执行某个任务 所有工作协程都会等待条件 事件发生 一旦事件被触发 它们就会开始执行 创建完所有goroutines后 主线程在发送广播信号之前应该知道所有goroutines确实处
  • 模板中的 bson.ObjectId

    我有一个具有 bson ObjectId 类型的结构 例如如下所示 type Test struct Id bson ObjectId Name string Foo string 我想在 html 模板中呈现它 Name Food a h
  • 打印到 stdout 会导致阻塞的 goroutine 运行吗?

    作为一个愚蠢的基本线程练习 我一直在尝试实现理发师睡觉的问题 http en wikipedia org wiki Sleeping barber problem在戈兰 对于通道来说 这应该很容易 但我遇到了一个 heisenbug 也就是
  • 这两种方式哪一种是惯用的方式? time.Sleep() 还是自动收报机?

    我必须每分钟执行一些语句 我不确定我应该遵循以下哪一项 如果有人能解释内存和 CPU 方面的优缺点 那就太好了 时间 Sleep func main go func for time Sleep time Minute fmt Printl
  • 测试 Python 脚本

    如何使用 doctest unittest nose 等测试框架测试 Python 脚本的 STDOUT 输出 例如 假设运行我的脚本 todo py list 应该返回 取出垃圾 我读过有人将脚本的 STDOUT 打印部分与生成要打印的输
  • 为什么我不能将左大括号放在下一行?

    当我尝试编译以下代码时遇到奇怪的错误 package main import fmt fmt func main var arr 3 int for i 0 i lt 3 i fmt Printf d arr i 错误如下 unexpect
  • go中有memset的类似物吗?

    在 C 中 我可以使用某些值初始化数组memset https msdn microsoft com en us library aa246471 28v vs 60 29 aspx const int MAX 1000000 int is
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req
  • 存根方法时出现 InvalidUseOfMatchersException

    我有这个 TestNG 测试方法代码 InjectMocks private FilmeService filmeService new FilmeServiceImpl Mock private FilmeDAO filmeDao Bef
  • 如何在golang中创建一个充满“000000...”数据的10MB文件?

    我打算在日志或磁盘队列等系统中使用 fdatasync 首先是在 ext4 等文件系统中创建一个带有 000000 的 10MB 文件 但我不知道如何正确地做到这一点 jnml fsc r630 src tmp SO 16797380 ls
  • “go.tools”的权限被拒绝错误

    当我尝试安装 go 工具时 我的权限被拒绝 usr local go pkg tool linux amd64 cover 我可以接受 因为它是 usr local 目录及需求root使用权 但我的第一个疑问是为什么当我设置时它试图安装在这
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • Android 版 facebook connect 返回空白登录屏幕?

    我正在尝试使用旧的 facebook 连接身份验证来验证我的 android 客户端 以获得开始使用 facebook 的网络服务所需的必要会话 ID 和其他凭据 我遇到的问题是 当我的 Android 应用程序启动并尝试加载 facebo
  • 防止 UIWebView 内出现烦人的 HTML5 地理位置警报

    每当脚本请求地理位置时 使用HTML5的地理定位 API UIWebView请求使用 iOS 定位服务的权限 这非常烦人 特别是当您加载静态时HTML文件时 它会不断询问每个文件的权限 即使用户已经为应用程序本身授予了此权限 有办法预防吗
  • Datatable:日期/时间排序插件未排序

    我有一个基本的 Spring Boot 应用程序 嵌入式 Tomcat Thymeleaf 模板引擎 我想订购数据表的 1 个日期列 在我的 POJO 中 public String getTimeFormatted DateTimeFor
  • ContentResolver.query() 方法抛出“无效令牌限制”错误

    内部版本号为 RQ1A 201205 003 或更高版本的 Pixel 设备上会出现以下错误 我想知道错误的原因以及如何处理 这是错误还是规格更改 code ContentResolver resolver getContentResolv
  • Visual Studio C++ Link1104无法打开文件MSVCURTD.lib

    我已经在 Visual Studio 2017 社区中打开了一个用 Visual Studio 2012 Express 用 C 编写 制作的项目 当我尝试编译时出现以下错误 LINK1104 无法打开文件 MSVCURTD lib 如果我
  • 重播 GIF 动画/单击时重新加载 GIF

    我有一个很大的 GIF 动画 我让它显示一个加载图标 直到 GIF 加载完毕 加载后就会显示 GIF 效果很好 但我想添加一个 重播 按钮来触发 GIF 重播 重新加载 加载和GIF的代码 HTML div class loading im
  • Linq to Entities 删除

    是否有内置方法可以使用主键通过 Linq to Entities 进行删除 目前的解决方法是创建一个名为DeleteTable的存储过程 表是表名 然后在 C LINQ To Entities 中我只需执行 context DeleteTa
  • 如何在 Appveyor 构建之前运行 VCUpgrade?

    我们分发了一组 Visual Studio 2010 项目文件 用户应该根据自己的口味进行升级 我们的 appveyor yml file http github com weidai11 cryptopp blob master appv
  • R Shiny with Leaflet - 单击后更改标记的颜色

    我正在开发一个闪亮的应用程序 它显示带有标记的传单地图 标记是可点击的 我收集被点击标记的 ID 但我还想更改单击标记的颜色 当标记为蓝色时 它应更改为红色标记 反之亦然 到目前为止 我已经有了跟踪单击的标记的代码 并且可以将 ID 存储在
  • 什么会导致 %5B0%5D 添加到 url

    我试图找出为什么删除过滤器的链接在我的网站上不起作用 似乎是因为链接已更改为包含 5B0 5D 和其他各种字母和数字 并添加了 据我所知 这是序列化函数导致的 还有其他什么可能导致这种情况 或者它绝对是序列化函数吗 它被称为百分比编码 ht
  • 在 netbeans 中运行 Web 应用程序

    我正在使用 netbeans 和 apache tomcat 来运行 Web 应用程序 我不断收到此错误 In place deployment at C WorkingDirectory Projects GreenWheelsProje
  • 从 iTunes Connect 中删除新的应用程序版本

    我在 iTunes Connect 中使用错误的版本号创建了应用程序的新版本 我想删除处于 准备上传 状态的新版本 我该怎么做呢 关于此还有其他问题 但他们没有提供任何答案 适用于已上传二进制文件的版本 或者已过时 我就此向 Apple 提
  • 在 C++ 中提供指针恒定视图的更好方法

    我有一个类必须返回一个constant一些指向软件上层的指针的视图 在内部 指针必须是非常量 因为类需要在内部操作对象 我没有看到任何选项可以在不复制所有指针的情况下向更高级别的客户端提供指针的常量视图 这看起来很浪费 如果我管理数百万个对
  • 如何连接到 TT X_TRADER API 以使用 python 创建自动交易系统?

    我已经在内部开发论坛中多次看到这个问题 因此想提供一个快速示例 说明如何立即在 python 中实现这一点 首先 请注意 我们所做的只是连接到相关的 X TRADER com 对象 因此以下所有内容仍然适用 https www tradin
  • 如何将复选框与文本对齐到屏幕右侧?

    我里面有一个复选框TableRow 我想将复选框和文本对齐到屏幕的右侧 但是当我使用android gravity right 它仅将文本与屏幕右侧对齐 但不与正方形 复选框本身 对齐 它们似乎是单独对齐的 复选框位于屏幕的左侧 文本位于屏
  • 具有不同函数原型的函数查找表

    除了一系列之外 根据用户输入调用指定函数的最佳方法是什么 if and strcmp 例如 p 2 2 gt call func p 2 2 a 8 gt call func a 7 m gt call func m void 我知道制作一
  • 使用 javascript 或 jQuery 隐藏所有带有与数字“0”或自定义值匹配的文本或innerHTML的“a”元素

    我需要隐藏全部 a 带有文本或的元素innerHTML匹配数字 foo 或使用 javascript 或 jQuery 的自定义值 li a href class dir foo a li 我努力了 jQuery document read
  • 为什么Python列表排序后速度变慢?

    在下面的代码中 我创建了两个具有相同值的列表 一个列表未排序 s not 另一个列表已排序 s yes 这些值由 randint 创建 我为每个列表运行一些循环并计时 import random import time for x in r
  • Rails 5 渲染部分并传递数据

    我无法了解数据传递和提供给部分数据的一般方式 例如 我有一个控制器将实例变量传递给呈现部分的模板 static pages controller rb def home feed items current user feed end ho
  • Cobra + Viper Golang 如何测试子命令?

    我正在使用 Go 开发一个网络应用程序 到目前为止一切顺利 但现在我将 Wercker 集成为 CI 工具并开始关心测试 但我的应用程序严重依赖 Cobra Viper 配置 标志 环境变量方案 并且我不知道如何在运行测试套件之前正确初始化