• Stars
    star
    18
  • Rank 1,208,065 (Top 24 %)
  • Language
    Go
  • License
    MIT License
  • Created over 2 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿฅฎ A simple way to generate mocks for multiple purposes

Mooncake

A simple way to generate mocks for multiple purposes

Mentioned in Awesome Go Go Report Card Build Status codecov GitHub GoDoc License: MIT

Table of Contents

What is Mooncake

Mooncake is a simple way to generate mocks for multiple purposes.

It was designed to be uncomplicated and simples, focused on development agility while reducing bureaucracy.

Compatible with different types of interfaces such as:

  • Default interfaces
type Simple interface{
  MyMethod()
}
  • Nested interfaces
type Nested interface{
  Simple
}
  • Generic Interfaces
type Generic[T,Z any] interface{
  MyCustomMethod(T) (T,Z)
}
  • Generic Nested Interfaces
type NestGeneric[T,Z any] interface{
  Generic[T,Z]
}

Development Status

This project is under development. Therefore, some features may contain minor instabilities, in addition to the possibility of new features being added periodically.

Getting Start

To start using mooncake you need to follow the steps below

Installation

To add mooncake to your project run:

go get github.com/GuilhermeCaruso/mooncake

To install the mooncake generator (moongen) run:

go install github.com/GuilhermeCaruso/mooncake/[email protected]

Mooncake Configuration File

Once you have decided to use mooncake in your project you will need to create a configuration file

The file must be in the yaml extension. His name doesn't matter, however we recommend it to be mooncake

  • Create mooncake.yaml file

Once created the following template must be used

mocks:
  package: #package
  path: #path
  files:
    - #files
  output: #output
  prefix: #prefix
Field Definition Example
package package name of files created mocks
path path for the interfaces directory interfaces/
files list of interface files to be mocked -
output path to the directory of the generated files mocks/
prefix optional value to be added as prefix on generated files generated

How to generate

Once the configuration file is done, to generate the files, run:

moongen --file <path_to_config_file>

How to use

After you have generated the mocks, to use the resources you can go like this:

package example

import (
  "testing"

  "github.com/GuilhermeCaruso/mooncake"
)

func checkValue(t *testing.T, es SimpleInterface, expectedResult string) {
  v, err := es.Get()
  if v != expectedResult {
    t.Errorf("unexpected result. expected=%v got=%v", expectedResult, v)
  }
  if err != nil {
    t.Errorf("unexpected error. expected=<nil> got=%v", err.Error())
  }
}

func TestWithMock(t *testing.T) {
  // Prepare new Mooncake Agent
  a := mooncake.NewAgent()
  // Start Implementation using created agent
  ac := NewMockSimpleInterface(a)
  // Define the implementation and responses
  ac.Prepare().Get().SetReturn("mocked_value", nil)
  checkValue(t, ac, "mocked_value")
}

License

MIT licensed. See the LICENSE file for details.