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  ```