github.com/benma/gogen@v0.0.0-20160826115606-cf49914b915a/cmd/gosimplemock/README.md (about) 1 # gosimplemock 2 3 Automatically generate simple mocks with zero dependencies 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 gosimplemock server 19 20 // Dummy test 21 func TestRequestReturnsServerError(t *testing.T) { 22 m := &requestMock{ 23 ServeFunc: func(path string) ([]byte, error) { 24 return nil, errors.New("failure") 25 }, 26 } 27 _, err := request(m, "/something") 28 assert.Error(t, err) 29 } 30 ``` 31 32 Mocking an interface from the standard library 33 34 ```go 35 //go:generate gosimplemock io.Writer 36 37 // Dummy test using the generated mock 38 func TestWriter(t *testing.T) { 39 expected := []byte("hello world") 40 m := &WriterMock{ 41 WriteFunc: func(actual []byte) (int, error) { 42 assert.Equal(t, expected, actual) 43 return len(actual), nil 44 }, 45 } 46 n, err := m.Write(expected) 47 assert.Equal(t, 11, n) 48 assert.Equal(t, nil, err) 49 } 50 ``` 51 52 Printing the generated code: 53 54 ```go 55 $ gosimplemock -o=- io.ReadCloser 56 /* 57 * CODE GENERATED AUTOMATICALLY WITH github.com/ernesto-jimenez/gogen/cmd/gosimplemock 58 * THIS FILE SHOULD NOT BE EDITED BY HAND 59 */ 60 61 package gogen 62 63 // ReadCloserMock mock 64 type ReadCloserMock struct { 65 CloseFunc func() error 66 67 ReadFunc func([]byte) (int, error) 68 } 69 70 // Close mocked method 71 func (m *ReadCloserMock) Close() error { 72 if m.CloseFunc == nil { 73 panic("unexpected call to mocked method Close") 74 } 75 return m.CloseFunc() 76 } 77 78 // Read mocked method 79 func (m *ReadCloserMock) Read(p0 []byte) (int, error) { 80 if m.ReadFunc == nil { 81 panic("unexpected call to mocked method Read") 82 } 83 return m.ReadFunc(p0) 84 } 85 ```