Calling "defer assert.NilError(t, someCommand())" executes "someCommand()"
immediately, but doesn't assert the error until the defer.
https://go.dev/play/p/EO--y7OYerg
package main
import (
"errors"
"testing"
"gotest.tools/v3/assert"
)
func TestDefer(t *testing.T) {
doSomething := func() error {
t.Log("doSomething failed with an error!")
return errors.New("foo error")
}
defer assert.NilError(t, doSomething())
t.Log("running test")
t.Log("running test")
t.Log("running test")
}
Produces:
=== RUN TestDefer
prog_test.go:12: doSomething failed with an error!
prog_test.go:18: running test
prog_test.go:19: running test
prog_test.go:20: running test
prog_test.go:21: assertion failed: error is not nil: foo error
--- FAIL: TestDefer (0.00s)
FAIL
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -78,7 +78,9 @@ func TestImageImport(t *testing.T) {
|
| 78 | 78 |
SourceName: "image_source", |
| 79 | 79 |
}, "repository_name:imported", tc.options) |
| 80 | 80 |
assert.NilError(t, err) |
| 81 |
- defer assert.NilError(t, result.Close()) |
|
| 81 |
+ defer func() {
|
|
| 82 |
+ assert.NilError(t, result.Close()) |
|
| 83 |
+ }() |
|
| 82 | 84 |
|
| 83 | 85 |
body, err := io.ReadAll(result) |
| 84 | 86 |
assert.NilError(t, err) |
| ... | ... |
@@ -71,7 +71,9 @@ func TestImageSave(t *testing.T) {
|
| 71 | 71 |
assert.NilError(t, err) |
| 72 | 72 |
resp, err := client.ImageSave(context.Background(), []string{"image_id1", "image_id2"}, tc.options...)
|
| 73 | 73 |
assert.NilError(t, err) |
| 74 |
- defer assert.NilError(t, resp.Close()) |
|
| 74 |
+ defer func() {
|
|
| 75 |
+ assert.NilError(t, resp.Close()) |
|
| 76 |
+ }() |
|
| 75 | 77 |
|
| 76 | 78 |
body, err := io.ReadAll(resp) |
| 77 | 79 |
assert.NilError(t, err) |
| ... | ... |
@@ -292,7 +292,9 @@ func (tr Reader) TestFollow(t *testing.T) {
|
| 292 | 292 |
}() |
| 293 | 293 |
|
| 294 | 294 |
expected := logMessages(t, l, mm)[:2] |
| 295 |
- defer assert.NilError(t, l.Close()) // Reading should end before the logger is closed. |
|
| 295 |
+ defer func() {
|
|
| 296 |
+ assert.NilError(t, l.Close()) // Reading should end before the logger is closed. |
|
| 297 |
+ }() |
|
| 296 | 298 |
<-doneReading |
| 297 | 299 |
assert.DeepEqual(t, logs, expected, compareLog) |
| 298 | 300 |
}) |
| ... | ... |
@@ -317,7 +319,9 @@ func (tr Reader) TestFollow(t *testing.T) {
|
| 317 | 317 |
}() |
| 318 | 318 |
|
| 319 | 319 |
expected := logMessages(t, l, mm)[1:2] |
| 320 |
- defer assert.NilError(t, l.Close()) // Reading should end before the logger is closed. |
|
| 320 |
+ defer func() {
|
|
| 321 |
+ assert.NilError(t, l.Close()) // Reading should end before the logger is closed. |
|
| 322 |
+ }() |
|
| 321 | 323 |
<-doneReading |
| 322 | 324 |
assert.DeepEqual(t, logs, expected, compareLog) |
| 323 | 325 |
}) |
| ... | ... |
@@ -235,13 +235,15 @@ func TestVolCreateValidation(t *testing.T) {
|
| 235 | 235 |
} |
| 236 | 236 |
v, err := r.Create(tc.name, tc.opts) |
| 237 | 237 |
if v != nil {
|
| 238 |
- defer assert.Check(t, r.Remove(v)) |
|
| 238 |
+ defer func() {
|
|
| 239 |
+ assert.Check(t, r.Remove(v)) |
|
| 240 |
+ }() |
|
| 239 | 241 |
} |
| 240 | 242 |
if tc.expectedErr == "" {
|
| 241 | 243 |
assert.NilError(t, err) |
| 242 | 244 |
} else {
|
| 243 | 245 |
assert.Check(t, cerrdefs.IsInvalidArgument(err), "got: %T", err) |
| 244 |
- assert.ErrorContains(t, err, tc.expectedErr) |
|
| 246 |
+ assert.Check(t, is.ErrorContains(err, tc.expectedErr)) |
|
| 245 | 247 |
} |
| 246 | 248 |
}) |
| 247 | 249 |
} |
| ... | ... |
@@ -322,7 +322,9 @@ func TestAccessPublishedPortFromHost(t *testing.T) {
|
| 322 | 322 |
revertIPv6OnAll := enableIPv6OnAll(t) |
| 323 | 323 |
defer revertIPv6OnAll() |
| 324 | 324 |
assert.NilError(t, exec.Command("ip", "addr", "add", "fdfb:5cbb:29bf::2/64", "dev", "eth0", "nodad").Run())
|
| 325 |
- defer assert.NilError(t, exec.Command("ip", "addr", "del", "fdfb:5cbb:29bf::2/64", "dev", "eth0").Run())
|
|
| 325 |
+ defer func() {
|
|
| 326 |
+ assert.NilError(t, exec.Command("ip", "addr", "del", "fdfb:5cbb:29bf::2/64", "dev", "eth0").Run())
|
|
| 327 |
+ }() |
|
| 326 | 328 |
|
| 327 | 329 |
testcases := []struct {
|
| 328 | 330 |
ulpEnabled bool |