{"id":16906249,"url":"https://github.com/ernesto-jimenez/goautomock","last_synced_at":"2025-03-22T10:31:11.938Z","repository":{"id":46220947,"uuid":"76290879","full_name":"ernesto-jimenez/goautomock","owner":"ernesto-jimenez","description":"Automatically generate mocks for interfaces with go generate","archived":false,"fork":false,"pushed_at":"2021-11-05T19:39:21.000Z","size":235,"stargazers_count":72,"open_issues_count":3,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-18T10:21:37.195Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ernesto-jimenez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-12T20:00:47.000Z","updated_at":"2024-09-23T11:03:15.000Z","dependencies_parsed_at":"2022-09-16T09:21:45.839Z","dependency_job_id":null,"html_url":"https://github.com/ernesto-jimenez/goautomock","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ernesto-jimenez%2Fgoautomock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ernesto-jimenez%2Fgoautomock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ernesto-jimenez%2Fgoautomock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ernesto-jimenez%2Fgoautomock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ernesto-jimenez","download_url":"https://codeload.github.com/ernesto-jimenez/goautomock/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244943732,"owners_count":20536290,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T18:41:54.620Z","updated_at":"2025-03-22T10:31:11.487Z","avatar_url":"https://github.com/ernesto-jimenez.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# goautomock\n\nAutomatically generate mocks from interfaces using `go generate`.\n\n# Installation\n\n```shell\ngo get github.com/ernesto-jimenez/goautomock\n```\n\n# Usage\n\nCreating an interface in your code to mock a dependency:\n\n[embedmd]:# (_examples/simple/example_test.go /.*goautomock.*/ $)\n```go\n//go:generate goautomock server\n\ntype server interface {\n\tServe(string) ([]byte, error)\n}\n\nfunc request(s server, path string) ([]byte, error) {\n\treturn s.Serve(path)\n}\n\n// Dummy test\nfunc TestRequestReturnsServerError(t *testing.T) {\n\tm := NewServerMock()\n\tm.ServeFunc = func(in string) ([]byte, error) {\n\t\treturn nil, errors.New(\"error\")\n\t}\n\t_, err := request(m, \"/something\")\n\tassert.Error(t, err)\n\tassert.Equal(t, 1, m.ServeTotalCalls())\n}\n```\n\nHere you can see what the generated mock looks like:\n\n[embedmd]:# (_examples/simple/server_mock_test.go)\n```go\n/*\n* CODE GENERATED AUTOMATICALLY WITH github.com/ernesto-jimenez/goautomock\n* THIS FILE MUST NEVER BE EDITED MANUALLY\n */\n\npackage simple\n\n// serverMock mock\ntype serverMock struct {\n\tcalls map[string]int\n\n\tServeFunc func(string) ([]byte, error)\n}\n\nfunc NewServerMock() *serverMock {\n\treturn \u0026serverMock{\n\t\tcalls: make(map[string]int),\n\t}\n}\n\n// Serve mocked method\nfunc (m *serverMock) Serve(p0 string) ([]byte, error) {\n\tif m.ServeFunc == nil {\n\t\tpanic(\"unexpected call to mocked method Serve\")\n\t}\n\tm.calls[\"Serve\"]++\n\treturn m.ServeFunc(p0)\n}\n\n// ServeCalls returns the amount of calls to the mocked method Serve\nfunc (m *serverMock) ServeTotalCalls() int {\n\treturn m.calls[\"Serve\"]\n}\n```\n\nMocking an interface from the standard library:\n\n[embedmd]:# (_examples/simple/stdlib_test.go /.*goautomock.*/ $)\n```go\n//go:generate goautomock io.Writer\n\n// Dummy test using the generated mock\nfunc TestWriter(t *testing.T) {\n\tm := NewWriterMock()\n\texpected := []byte(\"hello world\")\n\n\tm.WriteFunc = func(b []byte) (int, error) {\n\t\tassert.Equal(t, expected, b)\n\t\treturn len(b), nil\n\t}\n\n\tn, err := m.Write(expected)\n\tassert.NoError(t, err)\n\tassert.Equal(t, 11, n)\n\tassert.Equal(t, 1, m.WriteTotalCalls())\n}\n```\n\n# Picking a different mock style\n\n`goautomock` ships with different mock templates. You can see which ones with:\n\n```shell\n$ goautomock -list-templates\nsimple\ntestify\n```\n\nYou can pick the template you want to use with `-template`\n\n[embedmd]:# (_examples/testify/example_test.go /.*goautomock.*/ $)\n```go\n//go:generate goautomock -template=testify server\n\ntype server interface {\n\tServe(string) ([]byte, error)\n}\n\nfunc request(s server, path string) ([]byte, error) {\n\treturn s.Serve(path)\n}\n\n// Dummy test\nfunc TestRequestReturnsServerError(t *testing.T) {\n\tm := \u0026serverMock{}\n\tm.On(\"Serve\", \"/something\").Return(nil, errors.New(\"error\"))\n\n\t_, err := request(m, \"/something\")\n\tassert.Error(t, err)\n\tm.AssertNumberOfCalls(t, \"Serve\", 1)\n}\n```\n\n## Defining your own mock templates\n\nYou can use your own custom template by passing a file name to `-template`. Example:\n\n```shell\n# Create a new template based on goautocomplete's testify template\n$ goautomock -template=simple -print-template \u003e mock.go.tpl\n\n# Customise your template\n\n# Use your template\n$ goautomock -template=mock.go.tpl io.Writer\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fernesto-jimenez%2Fgoautomock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fernesto-jimenez%2Fgoautomock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fernesto-jimenez%2Fgoautomock/lists"}