Skip to content

newmo-oss/gotestingmock

Repository files navigation

gotestingmock Go ReferenceGo Report Card

gotestingmock mocking utilities for unit test in Go.

Usage

Running test functions on isolated goroutine with gotestingmock.Run

func Test(t *testing.T) {
	t.Parallel()

	// gotestingmock.Run simulates a test function on a goroutine.
	got := gotestingmock.Run(func(tb *gotestingmock.TB) {
		// The test helper can use *gotestingmock.TB as testing.TB
		// which is implemented  by testing.T, testing.B and testing.F.
		MyTestHelper(tb, "arg1")
	})

	// Check if the test helper failed with t.Error, t.Fatal or similar methods.
	if !got.Failed {
		t.Error("expected failed did not occur")
	}

	// Check that the test helper has panicked.
	if got.PanicValue != nil {
		t.Error("unexpected panic:", got.PanicValue)
	}
}

Detecting incorrect FailNow usage in goroutines with gotestingmock.StrictGoexit

func TestWithHTTPServer(t *testing.T) {
	tb := gotestingmock.StrictGoexit(t)

	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		// This will panic because it's called from the handler's goroutine
		// tb.Fatal("unexpected error")

		// Instead, use proper error handling:
		if err := someOperation(); err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}
		w.WriteHeader(http.StatusOK)
	}))
	defer server.Close()

	resp, err := http.Get(server.URL)
	if err != nil {
		tb.Fatal(err)  // This is safe - called from test goroutine
	}
	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		tb.Fatalf("expected status 200, got %d", resp.StatusCode)
	}
}

License

MIT

About

gotestingmock mocking utilities for unit test in Go

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages