如何在Golang中测试各种退出代码?

时间:2015-11-16 01:07:44

标签: testing go exit-code

已创建一个函数,该函数根据输入返回0,1,2或3退出代码。为了避免代码需要在每次代码更改时都需要构建和手动测试,需要进行测试。

目标:在Golang中测试不同的退出代码

尝试

尝试一次

thisthis Q&A的代码示例都没有回答这个问题。

尝试两个

func ExitCodeOne() {
    fmt.Println("Exit code 1")
    os.Exit(1)
}

结果:

Your username is "bla2".Your username is "bla3".Exit code 1
FAIL    tool    0.012s

因为退出代码1导致整个测试失败。

尝试3

func ExitCodeZero() {
    fmt.Println("Exit code 0")
    os.Exit(0)
}

结果:

ok tool 0.008s

而不是:

ok tool 0.009s coverage: 72.7% of statements

因为退出代码0停止测试,但测试能够退出而不会抛出错误,因为状态代码为0。

尝试4

import (
    "os"
    "testing"
    . "github.com/onsi/gomega"
    . "github.com/onsi/gomega/gexec"
)

func TestAttempt4(t *testing.T) {
    session := ExitCodeOne()
    Eventually(session).Should(Exit(0))
}

结果:

ExitCodeOne() used as value

问题

目前遇到以下问题:

  1. 如何获取退出代码?
  2. 如何防止退出代码1让测试失败
  3. 如何将实际退出代码与预期的退出代码进行比较?
  4. 期望的答案

    需要能够将实际退出代码与预期退出代码进行比较的测试,例如:

    func TestArgs(t *testing.T) {
        ExitCodeOne()
    
        actual:=<current_exit_code_to_string>
        expected:=1
    
        if actual != expected {
            t.Errorf("Test failed, expected: '%s', got:  '%s'", expected, actual)
        }
    }
    

0 个答案:

没有答案