52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
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")
|
|
}
|