package greeter_test import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/your-org/go-template/internal/greeter" "github.com/your-org/go-template/internal/logger" ) // ── Service (unit tests) ────────────────────────────────────────────────────── func TestGreet(t *testing.T) { svc := greeter.New(logger.NewNop()) t.Run("returns personalised greeting", func(t *testing.T) { msg, err := svc.Greet("World") require.NoError(t, err) assert.Equal(t, "Hello, World!", msg) }) t.Run("rejects empty name", func(t *testing.T) { _, err := svc.Greet("") require.Error(t, err) assert.Contains(t, err.Error(), "name must not be empty") }) } // ── Mock usage example ──────────────────────────────────────────────────────── // The mock lives in mocks/greeter/mock_greeter.go and is generated by: // // make mocks // // This test shows how a *consumer* of the Greeter interface would use the mock. // It lives here only for proximity to the interface definition — in a real // project, consumer packages write their own tests with the mock. func TestMockUsageExample(t *testing.T) { // Import path when used in another package: // mocks "github.com/your-org/go-template/mocks/greeter" // // mock := mocks.NewMockGreeter(t) // mock.EXPECT().Greet("Alice").Return("Hello, Alice!", nil) // // result, err := someConsumer(mock) // require.NoError(t, err) // assert.Equal(t, "Hello, Alice!", result) t.Skip("mock usage — see comment above for pattern") }