golang subprocess tests

简介: golang Subprocess testsSometimes you need to test the behavior of a process, not just a function.func Crasher() { fmt.

golang Subprocess tests

Sometimes you need to test the behavior of a process, not just a function.

func Crasher() {
    fmt.Println("Going down in flames!")
    os.Exit(1)
}

To test this code, we invoke the test binary itself as a subprocess:

func TestCrasher(t *testing.T) {
    if os.Getenv("BE_CRASHER") == "1" {
        Crasher()
        return
    }
    cmd := exec.Command(os.Args[0], "-test.run=TestCrasher")
    cmd.Env = append(os.Environ(), "BE_CRASHER=1")
    err := cmd.Run()
    if e, ok := err.(*exec.ExitError); ok && !e.Success() {
        return
    }
    t.Fatalf("process ran with err %v, want exit status 1", err)
}

核心技巧在于os.args[0]可以获取到真实的可执行 test 程序,从而改变环境变量.

目录
相关文章
|
3月前
|
SQL Python
Python3 notes
Python3 notes
|
传感器 SQL NoSQL
【物联网架构】最适合物联网的开源数据库
【物联网架构】最适合物联网的开源数据库
|
域名解析 Web App开发 存储
HTTP的基础知识和DNS的解析过程
我们都知道现在大部分的B/S 系统。其核心的通讯协议还是 TCP/IP 协议,应用层的话就是HTTP 协议,我们最常的打交到的就是HTTP协议了。所以了解HTTP协议的相关知识显得尤为重要。
1499 0
HTTP的基础知识和DNS的解析过程
|
数据处理
海量数据处理面试题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
海量数据处理面试题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
662 0
海量数据处理面试题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
|
存储 数据可视化 Shell
18 个 Jupyter Notebook 小技巧,帮助你快速腾飞
18 个 Jupyter Notebook 小技巧,帮助你快速腾飞
18 个 Jupyter Notebook 小技巧,帮助你快速腾飞
|
Shell 程序员 网络安全
Windows权限维持技术总结、复现
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon的作用是指定用户登录时 Winlogon 运行的程序。默认情况下,Winlogon 运行 Userinit.exe(运行登录脚本),重新建立网络连接,然后启动 Windows 用户界面 Explorer.exe。可以更改此条目的值以添加或删除程序。例如,要在 Windows 资源管理器用户界面启动之前运行某个程序,可以将该程序的名称替换为该条目的值中的 Userinit.exe,然后在该程序中包含启动 Userinit.exe 的指令。
279 0
|
消息中间件 编解码 安全
[笔记]Windows核心编程《二十二》注入DLL和拦截API
]Windows核心编程《二十二》注入DLL和拦截API
528 0
[笔记]Windows核心编程《二十二》注入DLL和拦截API
|
缓存 安全 Java
基于BuildKit优化Dockerfile的构建
基于BuildKit优化Dockerfile的构建
755 0
|
关系型数据库 MySQL PHP
PHP连接MySQL 8.0报错的解决办法
PHP连接MySQL 8.0报错的解决办法