-
Notifications
You must be signed in to change notification settings - Fork 18.8k
Closed
Milestone
Description
It's pretty usual to have tests make temp files.
And it's pretty usual to have tests leak temp files. (#23619 tracks detecting it for Go's own tests, as it keeps coming up)
Doing things properly also gets kinda boilerplatey.
I propose adding a method to testing.TB, *testing.T, and *testing.B something like this:
// TempDir returns a temporary directory for the test to use.
// It is lazily created on first access, and calls t.Fatal if the directory
// creation fails.
// Subsequent calls to t.TempDir return the same directory.
// The directory is automatically cleaned up when the test exits.
func (t *T) TempDir() string {
t.tempDirOnce.Do(func() {
t.tempDir, t.tempDirErr = ioutil.TempDir("", t.Name())
if t.tempDirErr == nil {
t.Cleanup(func() {
if err := os.RemoveAll(t.tempDir); err != nil {
t.Errorf("TempDir RemoveAll cleanup: %v", err)
}
})
}
})
if t.tempDirErr != nil {
t.Fatalf("TempDir: %v", err)
}
return t.tempDir
}Reactions are currently unavailable