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.
Jalankan command:
go get github.com/vektra/mockery/v2/.../
Ketik perintah:
mockery --all
Maka mockery akan membuatkan folder mocks
yang berisi implementasi semua interface.
mocks
├── GreeterService.go
└── Repository.go
0 directories, 2 files
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