Skip to content

Instantly share code, notes, and snippets.

@ynwd
Last active November 26, 2020 14:32
Show Gist options
  • Save ynwd/f0cd876499596cb7ef3225d51d22e543 to your computer and use it in GitHub Desktop.
Save ynwd/f0cd876499596cb7ef3225d51d22e543 to your computer and use it in GitHub Desktop.
Super Easy Mockery Explanation

Membuat Mock dengan Mockery

Catatan ini merupakan lanjutan dari Test dan Mock Menggunakan Testify

Pada catatan sebelumnya, kita membuat mock secara manual.

Yang jadi pertanyaan:

  • Apa yang terjadi jika terdapat banyak sekali interface?

Tentu saja programmernya capek.

Padahal secara umum mock itu melakukan hal yang sama:

  • inject parameter methodnya.
  • kembalikan return value sesuai signature type.

Mockery muncul untuk menjawab permasalahan itu.

Starnya sudah mencapai 22k. Sangat banyak.

Instalasi

Jalankan command:

go get github.com/vektra/mockery/v2/.../

Penggunaan

Ketik perintah:

mockery --all

Maka mockery akan membuatkan folder mocks yang berisi implementasi semua interface.

mocks
├── GreeterService.go
└── Repository.go

0 directories, 2 files

Testing

Setelah struct mock-nya ter-generate, mereka bisa kita import.

Perhatikan kode berikut:

package main

import (
	"testing"

	"mock/mocks"

	"github.com/stretchr/testify/assert"
)

func TestMockMethodWithArgs(t *testing.T) {

	theRepoMock := mocks.Repository{}

	theRepoMock.On("FetchMessage", "id").Return("lah", nil)

	g := greeter{&theRepoMock, "id"}

	assert.Equal(t, "lah", g.Greet())

	theRepoMock.AssertExpectations(t)
}

Jalankan test seperti biasa:

go test -v

Hasilnya:

=== RUN   TestMockMethodWithArgs
    main_test.go:22: PASS:      FetchMessage(string)
--- PASS: TestMockMethodWithArgs (0.00s)
PASS
ok      mock    0.002s

Catatan Terkait

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment