Test-driven development (TDD) terkadang membutuhkan banyak waktu untuk membuat sebuah aplikasi. Entah itu sebuah aplikasi web atau sebuah aplikasi CLI, sama saja. Disiplin untuk melakukan testing adalah hal yang sangat sulit. Tetapi ini sangat merupakan investasi yang sangat layak. Siapa tahu, ini akan membantu kalian mencegah bug-bug zero-day yang tidak diinginkan.
Selain itu, membuat tests akan membantu kalian mengembangkan kode yang lebih baik. Kode yang dapat ditest adalah kode yang lebih baik. Setidaknya itu yang saya pikirkan. Karena itu memaksa kalian untuk berpikir mengenai kasus-kasus yang mungkin terjadi, membuat fungsi-fungsi terpisah yang lebih kecil, dll. Walaupun ini memakan waktu, ini membuat kode kalian menjadi lebih dapat dibaca dan hanya memberikan kesempatan kecil untuk bug dapat muncul ke permukaan.
Cobra juga tidak memiliki alasan untuk tidak memiliki test. Walaupun itu hanya membantu kalian membuat aplikasi CLI, itu membutuhkan kode yang dapat ditest juga. Di postingan blog ini, kalian akan belajar bagaimana cara mengimplementasi unit test untuk Cobra.
Initialisasi Projek Cobra
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cobra init example --pkg-name example
Your Cobra application is ready at
/tmp/example
$ cd example && go mod init example
go: creating new go.mod: module example
go: to add module requirements and sums:
go mod tidy
$ tree .
.
├── cmd
│ └── root.go
├── go.mod
├── LICENSE
└── main.go
1 directory, 4 files
Memodifikasi Command Root
Untuk mengimplemen sebuah unit test sederhana, kalian bisa menghapus semua konten dari file root.go dan buat itu seminimum mungkin. Sebagai contoh:
Sekarang kalian memiliki aplikasi CLI sederhana. Mari coba jalankan.
Dengan toggle
1
2
$ go run main.go -t
ok
Tanpa toggle
1
2
3
4
5
6
7
8
9
10
11
$ go run main.go
Error: not ok
Usage:
example [flags]
Flags:
-h, --help help for example
-t, --toggle Help message for toggle
Error: not ok
exit status 1
Sekarang kodenya berjalan, tetapi tidak terlihat seperti kode yang dapat ditest. Mari modifikasi. Untuk mengubah kodenya dan membuat itu dapat ditest, kalian memiliki beberapa pilihan.
Mengubah struktur Cobra, membuat fungsi yang mengembalikan rootCmd dan mengirimnya ke fungsi Execute sehingga bisa dieksekusi dari file main
Pertahankan struktur Cobra yang natural, dan bekerja lebih banyak pada testnya.
Kembali kepada kalian untuk memilih opsi 1 atau 2. Kalian bisa menyesuaikan dengan proyek kalian. Tetapi, jika kalian ingin mempertahankan struktur Cobra yang mengekspos cmd sebagai variabel, kalian bisa menggunakan opsi 2.
Membuat Test Cases
Katakanlah kalian menggunakan opsi 2. Sekarang kalian harus membuat test casenya, test casenya akan menjadi dengan toggle atau tanpa toggle. Tetapi sebelum itu, mari buat sebuah fungsi untuk membantu mengeksekusi command root dan menyimpan outputnya ke sebuah variabel. Dengan menyimpan output ke sebuah variabel, kalian dapat membandingkan outputnya dengan apa yang kalian harapkan.
Dan itulah bagaimana kalian mengimplemen unit test untuk aplikasi Cobra.
Terima kasih telah membaca!
···
Suka Konten Ini?
Bentuk dukungan apapun saya hargai! Dukung saya melalui Bitcoin, Ko-fi, Trakteer, atau lanjut baca konten saya yang lainnya. Kamu bisa menulis respon lewat Webmention dan beritahu saya URLnya lewat Telegraph.