関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れない内にメモメモ。。。
テスト時に一時的なディレクトリが欲しくなることは結構ありますね。
testing.T.TempDir()
を利用すると、一発で生成された一時ディレクトリパスが手に入るのでとても便利です。
以下の書籍で知りました。
いつも自前で生成してテストしてました・・今後はこのメソッド利用します。
サンプル
package main import ( "fmt" "os" "path/filepath" "testing" ) var ( tmpDir string ) func TestMain(m *testing.M) { ret := m.Run() // テスト終了後に一時ディレクトリが削除されているか確認 if tmpDir != "" { _, err := os.Stat(tmpDir) fmt.Printf("[teardown] os.Stat() ==> %v", err) } os.Exit(ret) } func TestTempDir(t *testing.T) { // // t.TempDir() にてテスト時に利用できる一時ディレクトリの // パスが取得出来る。この一時ディレクトリはテスト時に作成されて // テスト終了後に自動的に消去される。テスト時に手動で一時ディレクトリを // 確保しておく手間が無くなるため、とても便利。 // tmpDir = t.TempDir() t.Logf("tmpDir=%s", tmpDir) fi, err := os.Stat(tmpDir) t.Logf("IsDir=%v, Name=%s, Err=%v", fi.IsDir(), fi.Name(), err) // ディレクトリが存在しているだけでは何なので // 何かのファイルを書き込んでおく p := filepath.Join(tmpDir, "hello.txt") os.WriteFile(p, []byte("hello world"), 0777) fi, err = os.Stat(p) t.Logf("IsDir=%v, Name=%s, Err=%v", fi.IsDir(), fi.Name(), err) // t.TempDir() の呼び出しは何回でも良い // その度に、異なるディレクトリが返る for i := 0; i < 10; i++ { t.Logf("tmpDir=%s", t.TempDir()) } }
実行すると以下のようになります。
$ task task: [default] go test -v . === RUN TestTempDir main_test.go:34: tmpDir=/tmp/TestTempDir298149024/001 main_test.go:37: IsDir=true, Name=001, Err=<nil> main_test.go:45: IsDir=false, Name=hello.txt, Err=<nil> main_test.go:50: tmpDir=/tmp/TestTempDir298149024/002 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/003 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/004 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/005 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/006 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/007 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/008 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/009 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/010 main_test.go:50: tmpDir=/tmp/TestTempDir298149024/011 --- PASS: TestTempDir (0.00s) PASS [teardown] os.Stat() ==> stat /tmp/TestTempDir298149024/001: no such file or directory ok github.com/devlights/try-golang/examples/testing/tempdir 0.003s
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。