mock: nested-interfaces
Exhibit path: docs/examples/codegen/mock/nested-interfaces/
An interface that embeds another interface. Shows how the mock generator handles embedded interfaces: it flattens the method set and generates a single mock struct that satisfies the full embedded interface.
Input (in.go)
go
//go:build glacier_codegen_fixture
// Package rw defines read-write interfaces for streaming data.
package rw
// Reader reads bytes.
type Reader interface {
// Read reads up to len(p) bytes into p.
Read(p []byte) (n int, err error)
}
// ReadWriter reads, writes, and closes a byte stream.
//
// +glacier:mock
type ReadWriter interface {
Reader
// Write writes len(p) bytes from p.
Write(p []byte) (n int, err error)
// Close closes the stream.
Close() error
}Output (out.go)
go
//go:build glacier_codegen_fixture
// Code generated by glaciergen. DO NOT EDIT.
// Source: in.go
package rw
// MockReadWriter is a generated mock for ReadWriter.
type MockReadWriter struct {
// OnRead is called by Read. Set this in your test to control behavior.
OnRead func(p []byte) (n int, err error)
// OnWrite is called by Write. Set this in your test to control behavior.
OnWrite func(p []byte) (n int, err error)
// OnClose is called by Close. Set this in your test to control behavior.
OnClose func() error
}
// Read implements ReadWriter (via Reader).
func (m *MockReadWriter) Read(p []byte) (n int, err error) {
return m.OnRead(p)
}
// Write implements ReadWriter.
func (m *MockReadWriter) Write(p []byte) (n int, err error) {
return m.OnWrite(p)
}
// Close implements ReadWriter.
func (m *MockReadWriter) Close() error {
return m.OnClose()
}What the generator did
- Found
ReadWriterwhich embedsReaderandWriter. - Flattened the method set:
Read,Write, andCloseall appear onMockReadWriter. - The embedded interface is not represented as a separate mock field; the generated struct directly implements all methods. This keeps test code flat: one mock, one
On*field per method.