From ad78e90cc3decb3830c23d74d5851d1fc7fec758 Mon Sep 17 00:00:00 2001 From: Martin Englund Date: Tue, 6 Feb 2024 13:28:49 -0800 Subject: [PATCH] use defer instead of os.Exit(m.Run()) as of go1.15 `testing.M` returns the return code of `m.Run()`, so it is possible to use `defer` https://github.com/golang/go/issues/34129 --- README.md | 13 +++++++------ examples/FakeGoogleCloudStorage.md | 3 +-- examples/MongoDB.md | 24 ++++++++++++------------ examples/Mountebank.md | 14 +++++++------- examples/PostgreSQL.md | 14 +++++++------- 5 files changed, 34 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index a3b88515..a24b1798 100644 --- a/README.md +++ b/README.md @@ -100,14 +100,15 @@ func TestMain(m *testing.M) { log.Fatalf("Could not connect to database: %s", err) } - code := m.Run() + // as of go1.15 testing.M returns the exit code of m.Run(), so it is safe to use defer here + defer func() { + if err := pool.Purge(resource); err != nil { + log.Fatalf("Could not purge resource: %s", err) + } - // You can't defer this because os.Exit doesn't care for defer - if err := pool.Purge(resource); err != nil { - log.Fatalf("Could not purge resource: %s", err) - } + }() - os.Exit(code) + m.Run() } func TestSomething(t *testing.T) { diff --git a/examples/FakeGoogleCloudStorage.md b/examples/FakeGoogleCloudStorage.md index 96c35a4b..41a62e8e 100644 --- a/examples/FakeGoogleCloudStorage.md +++ b/examples/FakeGoogleCloudStorage.md @@ -63,8 +63,7 @@ func TestMain(m *testing.M) { log.Fatalf("Could not connect to Docker: %s", err) } - code := m.Run() - os.Exit(code) + m.Run() } func setUpGcloud() { diff --git a/examples/MongoDB.md b/examples/MongoDB.md index db6cb529..cfed1fcf 100644 --- a/examples/MongoDB.md +++ b/examples/MongoDB.md @@ -66,20 +66,20 @@ func TestMain(m *testing.M) { log.Fatalf("Could not connect to docker: %s", err) } - // run tests - code := m.Run() - - // When you're done, kill and remove the container - if err = pool.Purge(resource); err != nil { - log.Fatalf("Could not purge resource: %s", err) - } + defer func() { + // When you're done, kill and remove the container + if err = pool.Purge(resource); err != nil { + log.Fatalf("Could not purge resource: %s", err) + } - // disconnect mongodb client - if err = dbClient.Disconnect(context.TODO()); err != nil { - panic(err) - } + // disconnect mongodb client + if err = dbClient.Disconnect(context.TODO()); err != nil { + panic(err) + } + }() - os.Exit(code) + // run tests + m.Run() } ``` diff --git a/examples/Mountebank.md b/examples/Mountebank.md index d0fa92b7..dc319f5d 100644 --- a/examples/Mountebank.md +++ b/examples/Mountebank.md @@ -78,15 +78,15 @@ func TestMain(m *testing.M) { }); err != nil { log.Fatalf("Could not connect to docker: %s", err) } - //Run tests - code := m.Run() - // You can't defer this because os.Exit doesn't care for defer - if err := pool.Purge(resource); err != nil { - log.Fatalf("Could not purge resource: %s", err) - } + defer func() { + if err := pool.Purge(resource); err != nil { + log.Fatalf("Could not purge resource: %s", err) + } + }() - os.Exit(code) + // run tests + m.Run() } func TestHandler(t *testing.T) { diff --git a/examples/PostgreSQL.md b/examples/PostgreSQL.md index c832e17c..f5adb333 100644 --- a/examples/PostgreSQL.md +++ b/examples/PostgreSQL.md @@ -65,15 +65,15 @@ func TestMain(m *testing.M) { }); err != nil { log.Fatalf("Could not connect to docker: %s", err) } - //Run tests - code := m.Run() - // You can't defer this because os.Exit doesn't care for defer - if err := pool.Purge(resource); err != nil { - log.Fatalf("Could not purge resource: %s", err) - } + defer func() { + if err := pool.Purge(resource); err != nil { + log.Fatalf("Could not purge resource: %s", err) + } + }() - os.Exit(code) + // run tests + m.Run() } func TestRealbob(t *testing.T) {