Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/traefik/mocktail

Naive code generator that creates mock implementation using testify.mock
https://github.com/traefik/mocktail

go golang mock mock-generator testify testify-mocking

Last synced: 4 days ago
JSON representation

Naive code generator that creates mock implementation using testify.mock

Awesome Lists containing this project

README

        

# Mocktail





Mocktail logo

Naive code generator that creates mock implementation using `testify.mock`.

Unlike [mockery](https://github.com/vektra/mockery), Mocktail generates typed methods on mocks.

For an explanation of why we created Mocktail, you can read [this article](https://traefik.io/blog/mocktail-the-mock-generator-for-strongly-typed-mocks/).

## How to use

- Create a file named `mock_test.go` inside the package that you can to create mocks.
- Add one or multiple comments `// mocktail:MyInterface` inside the file `mock_test.go`.

```go
package example

// mocktail:MyInterface

```

## How to Install

### Go Install

You can install Mocktail by running the following command:

```bash
go install github.com/traefik/mocktail@latest
```

### Pre-build Binaries

You can use pre-compiled binaries:

* To get the binary just download the latest release for your OS/Arch from [the releases page](https://github.com/traefik/mocktail/releases)
* Unzip the archive.
* Add `mocktail` in your `PATH`.

## Notes

It requires testify >= v1.7.0

Mocktail can only generate mock of interfaces inside a module itself (not from stdlib or dependencies)

The `// mocktail` comments **must** be added to a file named `mock_test.go` only,
comments in other files will not be detected

## Examples

```go
package a

import (
"context"
"time"
)

type Pineapple interface {
Juice(context.Context, string, Water) Water
}

type Coconut interface {
Open(string, int) time.Duration
}

type Water struct{}
```

```go
package a

import (
"context"
"testing"
)

// mocktail:Pineapple
// mocktail:Coconut

func TestMock(t *testing.T) {
var s Pineapple = newPineappleMock(t).
OnJuice("foo", Water{}).TypedReturns(Water{}).Once().
Parent

s.Juice(context.Background(), "", Water{})

var c Coconut = newCoconutMock(t).
OnOpen("bar", 2).Once().
Parent

c.Open("a", 2)
}
```

## Exportable Mocks

If you need to use your mocks in external packages just add flag `-e`:

```shell
mocktail -e
```

In this case, mock will be created in the same package but in the file `mock_gen.go`.