golang/go
View on GitHuball: tests that change the working directory should use defer to restore it
Open
#45,182 opened on Mar 23, 2021
NeedsFixTestinghelp wanted
Repository metrics
- Stars
- (133,883 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
What version of Go are you using (go version)?
I have noted that the tests that need to change the current working directory use the following pattern:
- call
os.Getwdto get the current working directory - some code
- call
os.Chdirto change the current working directory - some code
- call
os.Chdirto restore the original working directory
An example is: https://github.com/golang/go/blob/master/src/os/removeall_test.go#L159
The code should probably use defer, using a support function like:
// chdir changes the current working directory to the named directory and
// returns a function that, when called, restores the original working
// directory.
func chdir(t *testing.T, dir string) func() {
wd, err := os.Getwd()
if err != nil {
t.Fatalf("chdir %s: %v", dir, err)
}
if err := os.Chdir(dir); err != nil {
t.Fatal(err)
}
return func() {
if err := os.Chdir(wd); err != nil {
t.Fatalf("restoring working directory: %v", err)
}
}
}
The new pattern is:
- call
defer chdir(dir)() - some code
This is more readable and ensures that the working directory is restored in case of test failures.