Home

Awesome

<div align="center"> <a href="#"> <img src="assets/mooncake_without_name_logo.svg" width="150px" height="150px" /> </a> <h1>Mooncake</h1> <p>A simple way to generate mocks for multiple purposes</p> </div>

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:

type Simple interface{
  MyMethod()
}
type Nested interface{
  Simple
}
type Generic[T,Z any] interface{
  MyCustomMethod(T) (T,Z)
}
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/moongen@v0.0.1

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

Once created the following template must be used

mocks:
  package: #package
  path: #path
  files:
    - #files
  output: #output
  prefix: #prefix
FieldDefinitionExample
packagepackage name of files createdmocks
pathpath for the interfaces directoryinterfaces/
fileslist of interface files to be mocked-
outputpath to the directory of the generated filesmocks/
prefixoptional value to be added as prefix on generated filesgenerated

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.