github.com/benma/gogen@v0.0.0-20160826115606-cf49914b915a/cmd/goautomock/README.md (about) 1 # goautomock 2 3 Automatically generate mocks 4 5 # Usage 6 7 Creating an interface in your code to mock a dependency 8 9 ```go 10 type server interface { 11 Serve(string) ([]byte, error) 12 } 13 14 func request(s server, path string) ([]byte, error) { 15 return s.Serve(path) 16 } 17 18 //go:generate goautomock server 19 20 // Dummy test 21 func TestRequestReturnsServerError(t *testing.T) { 22 m := &requestMock{} 23 m.On("Serve", "/something").Return(nil, errors.New("failure")) 24 _, err := request(m, "/something") 25 assert.Error(t, err) 26 } 27 ``` 28 29 Mocking an interface from the standard library 30 31 ```go 32 //go:generate goautomock io.Writer 33 34 // Dummy test using the generated mock 35 func TestWriter(t *testing.T) { 36 m := &WriterMock{} 37 expected := []byte("hello world") 38 m.On("Write", expected).Return(11, nil) 39 40 n, err := m.Write(expected) 41 assert.Equal(t, 11, n) 42 assert.Equal(t, nil, err) 43 } 44 ``` 45 46 Printing the generated code: 47 48 ```go 49 $ goautomock -o=- io.ReadCloser 50 /* 51 * CODE GENERATED AUTOMATICALLY WITH github.com/ernesto-jimenez/gogen/automock 52 * THIS FILE SHOULD NOT BE EDITED BY HAND 53 */ 54 55 package gogen 56 57 import ( 58 "fmt" 59 mock "github.com/stretchr/testify/mock" 60 ) 61 62 // ReadCloserMock mock 63 type ReadCloserMock struct { 64 mock.Mock 65 } 66 67 // Close mocked method 68 func (m *ReadCloserMock) Close() error { 69 70 ret := m.Called() 71 72 var r0 error 73 switch res := ret.Get(0).(type) { 74 case nil: 75 case error: 76 r0 = res 77 default: 78 panic(fmt.Sprintf("unexpected type: %v", res)) 79 } 80 81 return r0 82 83 } 84 85 // Read mocked method 86 func (m *ReadCloserMock) Read(p0 []byte) (int, error) { 87 88 ret := m.Called(p0) 89 90 var r0 int 91 switch res := ret.Get(0).(type) { 92 case nil: 93 case int: 94 r0 = res 95 default: 96 panic(fmt.Sprintf("unexpected type: %v", res)) 97 } 98 99 var r1 error 100 switch res := ret.Get(1).(type) { 101 case nil: 102 case error: 103 r1 = res 104 default: 105 panic(fmt.Sprintf("unexpected type: %v", res)) 106 } 107 108 return r0, r1 109 110 } 111 ```