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 程序,从而改变环境变量.

目录
相关文章
|
存储 运维 Serverless
Serverless架构在图像处理领域展现出了强大的优势
【4月更文挑战第22天】Serverless架构在图像处理中表现出显著优势:弹性伸缩自动适应负载变化,节省成本;按需付费减少费用,适合需求波动场景;简化运维让开发者专注应用创新;快速迭代部署提升市场响应速度;高可用性和容错性保证服务稳定性;跨平台支持增强兼容性;丰富生态加速开发进程。因此,Serverless是图像处理的理想选择。
123 1
|
机器学习/深度学习 数据采集 算法
Python实现SSA智能麻雀搜索算法优化支持向量机回归模型(SVR算法)项目实战
Python实现SSA智能麻雀搜索算法优化支持向量机回归模型(SVR算法)项目实战
|
编译器 C++ 容器
c++11新特性
c++11新特性
105 0
|
NoSQL 关系型数据库 MySQL
96分布式电商项目 - 项目部署
96分布式电商项目 - 项目部署
114 0
|
测试技术 定位技术 C++
QCustomPlot开发笔记(二):QCustomPlot用户交互、元素项以及特殊用法
QCustomPlot开发笔记(二):QCustomPlot用户交互、元素项以及特殊用法
QCustomPlot开发笔记(二):QCustomPlot用户交互、元素项以及特殊用法
|
算法
15天算法入门(六)
本文主要讲无重复字符的最长子串和字符串的排列
271 0
|
Linux API 芯片
Linux下网卡phy状态检测与控制
最近在一个项目中,集成一个交换机芯片的时候,遇到一些麻烦,发现交换机的性能总是上 不去,100M的交换机,实际交换能力只有10M。跟做硬件的同事一起,花了几周时间调试, 才找到问题。原来是接到交换机芯片上的几个子系统,用的Micrel 8041PHY芯片,默认关闭 了硬件流控,导致交换机无法通过流控来控制网络数据交换,结果使得其性能下降。而交换 机每个端口的PHY与子系统的PHY都使用的Auto Negotiation来协商链接状态,子系统默认不 支持流控,交换机也关闭了流控。
|
算法 数据库
线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12
上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议。构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题。
1554 0