Berarti ini kita sedang test function fetchMembership jika status koneksi online dan bentuk request yang kita berikan itu sesuai dengan ekspektasi server yang akan memberikan return status code 200 sehingga expected outcome/behaviournya adalah sukses.
Given (Arrange)
Pada tahap pertama, kita mendefinisikan apa saja yang dibutuhkan dalam pengetesan. Disini kita sediakan response yang ingin di return, mock client api, mock connection, dan terakhir, apa yang ingin kita test. Dalam kasus ini yang ingin di test adalah fucntion fetchMembership yang dimiliki oleh membershipApiService.
When (Act)
Selanjutnya, pada tahap kedua, kita perlu menulis apa yang seharusnya terjadi apabila function dipanggil dalam kondisi-kondisi yang sudah didefinisikan pada tahap pertama. Untuk itu kita perlu merujuk pada ekspektasi pada nama function. Pada kasus ini, karena kita ekspektasinya adalah sukses, maka kita tulis ekspektasinya adalah fungsi async berjalan sampai selesai dan tidak men-throw error apapun. Khususnya karena function fetchMembership adalah void function yang tidak memberikan return apa-apa, cara assertnya adalah dengan menulis expectation tersebut. Bagaimana kita tahu apabila ekspektasi sudah terpenuhi? Ketika function fetchMembership() jalan dan koneksi online serta response memberikan 200, maka ia akan menyelesaikan function, oleh karena itu kita menaruh expectation.fulfill() di dalam do block.
Then (Assert)
Yang terakhir, di tahap ketiga, kita ingin melakukan assertion terhadap expectation, apakah sudah sesuai atau belum. Ini bisa dilakukan dengan menggunakan XCTWaiter yang berperan sebagai perantara yang ‘nungguin’ hasil dari expectation. Kita juga harus mendefinisikan berapa lama waiter harus menunggu untuk mendapatkan hasil, jika tidak mendapatkan result dalam waktu yang ditentukan maka value akan menjadi timeout. Jika semua berjalan sesuai ekspektasi maka status result akan berubah menjadi .complete. Result inilah yang kita assert untuk menentukan apakah hasil sudah benar atau belum
Berdasarkan dokumentasi Apple, beberapa kemungkinan result adalah sebagai berikut:
Negative Test
Sama aja tapi kebalikannya expectation.fulfill() nya ketika function fetchMembership() throw error. Karena yang mau di assert adalah function men-throw error.
2. Async Function with Specific Return Type
Positive Test
Mirip banget cuman bedanya value dari function yang dijalanan di assign variable. Terus, cara assert nya bisa macem-macem, kalo disini dari value nya gak kosong aja.
Negative Test
Sama kayak sebelumnya cuman bedanya assertion testnya aja, kita assert di catch block nya supaya ensure bahwa function nya throw error.