PHPUnit : Cara Mengambil Value Dari Hasil Test Fungsi Lain

PHPUnit salah satu tool yang menarik untuk dipelajari terutama untuk kita yang ingin project atau aplikasi kita bebas dari bug. Mungkin ada beberapa kita pernah dengar istilah TDD, Test Driven Development? Atau mungkin pernah mendengar Continuous Integration? Nah dari sini mulai belajar bagaimana code yang kita buat itu sebelumnya harus menjalankan unit testing sehingga kedepan aplikasi kita lancar walaupun ada panambahan fitur baru.

Awalnya saya belajar PHPUnit karena ada kebutuhan membuat class mengambil data dari salah satu provider jasa pengiriman di Indonesia. Biasanya saya buatkan class saja serta method yang perkiraan dipakai oleh programmer lain. Namun ada request dari CTO untuk sekalian membuat unit test dari tiap method class yang saya buat.

Literatur pasti ke website dari PHPUnit https://phpunit.de. Membaca sekilas kurang jelas biasa saya buka dan searching di youtube lalu ketemu list video ini.

Setelah saya tonton semua video diatas, saya mulai coba membuat class Exception pada class yang saya buat dan ketemu satu masalah. “Kalau ambil value dari satu test method/fungsi yang sudah running dulu bagaimana ya?”

Misalnya ada satu method testing untuk create order. Setelah method testing create order itu pasti mengeluarkan ID Order. Nah ID Order ini kita pakai untuk melanjutkan proses testing berikutnya seperti mendapatkan detail order, mengubah status order dan lain sebagainya. Nah ID Order itu ingin saya pakai untuk unit testing di method lainnya. Bagaimana itu bisa dijakankan?

Awalnya saya buat attribute class lalu saya set dan get seperti biasa pada sebuah Class. Namun nothing effected πŸ˜€

Ternyata PHPUnit punya cara tersendiri untuk menangani hal tersebut. Caranya adalah dengan menambahkan semacam codeblock atau kalau di java annotation, decorator kalo di python. Code block itu adalah @depend

Contoh penggunaan ada disini: https://phpunit.de/manual/6.5/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.examples.StackTest2.php

Kalau kasus saya tinggal di kasih @depend [test_result_create_order_is_must_get_id] di method untuk mendapatkan detail order atau set status order. Jangan lupa di dalam method detail order itu tambahkan parameter yang di return dari method depend-nya.

public function test_result_create_order_is_must_get_id()
{
    $this->set_good_params();

    $result = (array) $this->tadaClient->create();
    $result_data = (array) $result['data'];
    
    $this->assertArrayHasKey('status', $result);
    $this->assertArrayHasKey('data', $result);
    $this->assertArrayHasKey('id', $result_data); // orderId
    
    $orderId = $result['data']->id;
    
    return $orderId; // harus di return untuk dapat dipakai oleh unit test lain.
}

/**
 * @depends test_result_create_order_is_must_get_id
 */
public function test_result_detail_order_is_has_status_data_key(string $orderId)
{
    $this->tadaClient->setOrderId($orderId);   
    $result = (array) $this->tadaClient->getDetail();

    $this->assertArrayHasKey('status', $result);
    $this->assertArrayHasKey('data', $result);
}

Kira-kira seperti ini. Mungkin bingung ya. Baiknya tonton dulu video youtube diatas. Atau bisa ditanyakan di blog ini jika ada yang kurang dimengerti πŸ˜€

Mudah-mudahan ada waktu buat bikin video atau tutorial untuk PHPUnit ini.

Artikel lainnya

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: