testing.afterを自由にしたかった。テストの最後になんかしたかった。golang

追記

1.4から普通にできるようになった。


なにかと最後に掃除したりしたい例があった。

要は、application側が、

package main

import (
    "xxx.com/xxx/xxx/models"
)

func main() {
    db, err := sql.Open()
 
    if err != nil {
        panic(err)
    }

        defer db.Close
    models.InitDbmap(db)

    // main
}

やらなんやら、別にこの例はどうでも良いけど、全体の最後になにかするのが出来るんだから、testing.Mainも自由にやりたい、もしくはtesting.after書きかえたい、なにかを追加したいみたいな希望があった。

go test は Package.TestGoFiles を順にロードして、testing.T.Testsにappendしてってるので、その最後に来るようにすれば良いかなーでもなーとか思ってる時に http://golang.org/src/pkg/net/http/z_last_test.go を発見したので、とりあえずこういう感じてやってこうかと思ってやってみている。

z_last_test.go

package models

import (
    "os/exec"
    "strings"
    "testing"
)

func TestThisFileIsLastTestFile(t *testing.T) {
    cmd := exec.Command("go", "list", "-f", "{{.TestGoFiles}}")
    output, err := cmd.CombinedOutput()

    if err != nil {
        panic(err)
    }

    tests := strings.Split(strings.Trim(string(output), " \n[]"), " ")
    lastTest := tests[len(tests)-1]

    if lastTest != "z_last_test.go" {
        t.Errorf("expected last_test is z_last_test.go, but got %v", lastTest)
    }
}

func TestHogeHoge(t *testing.T) {
    // なんか
}