Library Klien Google Cloud untuk Rust menyediakan helper yang menyederhanakan interaksi dengan operasi yang berjalan lama (LRO). Menyimulasikan perilaku LRO dalam pengujian unit melibatkan pemahaman detail yang mendasari yang diabstraksi oleh helper ini. Panduan ini menunjukkan cara menulis pengujian unit untuk polling LRO otomatis dan manual, termasuk skenario error.
Prasyarat
Panduan ini mengasumsikan bahwa Anda sudah memahami panduan berikut:
Menguji polling otomatis
Asumsikan bahwa kode aplikasi Anda menunggu lro::Poller::until_done() (polling otomatis):
Karena aplikasi hanya menggunakan hasil akhir LRO, Anda tidak perlu menguji cara aplikasi menangani hasil polling menengah. Pengujian Anda dapat menampilkan hasil akhir LRO langsung dari tiruan.
Membuat longrunning::model::Operation
Asumsikan bahwa Anda ingin panggilan menampilkan respons berikut:
Stub menampilkan longrunning::model::Operation, bukan
BatchRecognizeResponse. Kemas respons yang diharapkan ke dalam Operation::result:
Tetapkan kolom done ke true untuk menunjukkan kepada Poller bahwa operasi telah selesai, sehingga mengakhiri loop polling:
Menulis pengujian
Tentukan struct tiruan, yang mengimplementasikan trait
speech::stub::Speech:Dalam pengujian, buat tiruan dan tetapkan ekspektasi padanya:
Buat klien dari tiruan, panggil fungsi, dan verifikasi responsnya:
Menguji polling manual dengan metadata perantara
Asumsikan bahwa kode aplikasi Anda melakukan polling secara manual dan memproses update parsial:
Anda dapat menyimulasikan perilaku aplikasi saat menerima metadata perantara dengan menampilkan operasi yang sedang berlangsung dari tiruan.
Membuat longrunning::model::Operation
RPC BatchRecognize menampilkan hasil parsial sebagai
speech::model::OperationMetadata. Kemas metadata ini ke dalam kolom Operation::metadata dari longrunning::model::Operation yang ditampilkan:
Menulis pengujian
Tentukan struct tiruan, yang mengimplementasikan trait
speech::stub::Speechdan menggantiget_operation():Dalam pengujian, buat tiruan dan tetapkan ekspektasi untuk menampilkan hasil parsial (25%, 50%, 75%) diikuti dengan hasil akhir:
Perhatikan detail berikut tentang cara mengonfigurasi ekspektasi:
- RPC awal vs. RPC berikutnya: Ekspektasi pertama ditetapkan pada
batch_recognize(), sedangkan semua ekspektasi berikutnya ditetapkan padaget_operation(). RPCBatchRecognizeawal memulai LRO di server dan menampilkan ID operasi di kolomname(dihilangkan dari kode pengujian agar lebih singkat). Selanjutnya, library klien akan melakukan polling status LRO tersebut menggunakan RPCGetOperation. - Urutan panggilan: Ekspektasi didaftarkan dalam
Sequence. Hal ini memungkinkanmockallmemverifikasi urutan panggilan dan menentukan ekspektasiexpect_get_operationmana yang cocok dengan setiap polling.
- RPC awal vs. RPC berikutnya: Ekspektasi pertama ditetapkan pada
Buat klien dari tiruan, panggil fungsi, dan verifikasi responsnya:
Menyimulasikan error
Error dapat muncul di beberapa titik selama LRO.
Jika aplikasi Anda menggunakan polling otomatis, semua sumber error akan setara:
until_done() menampilkan error di Result, terlepas dari asalnya.
Menyimulasikan error saat memulai LRO
akan menghasilkan pengujian yang paling sederhana.
Menyimulasikan error saat memulai LRO
Untuk menyimulasikan error saat memulai LRO, konfigurasikan permintaan awal agar gagal dengan error:
Untuk polling manual, cabang PollingResult::Completed menerima error dari memulai LRO, yang mengakhiri loop polling:
Menyimulasikan LRO yang menghasilkan error
Untuk menyimulasikan LRO yang gagal setelah menampilkan metadata perantara, tampilkan error di longrunning::model::Operation akhir:
Tetapkan ekspektasi untuk menampilkan Operation yang gagal dari get_operation:
Dalam polling manual, cabang PollingResult::Completed menerima hasil error, yang mengakhiri loop polling:
Menyimulasikan error polling
Loop polling juga dapat keluar saat kebijakan polling habis. Jika hal ini terjadi, library klien tidak dapat menentukan secara pasti apakah LRO telah selesai.
Jika aplikasi Anda memiliki logika kustom untuk menangani error polling, Anda dapat mengujinya dengan menampilkan error langsung dari ekspektasi get_operation:
Dalam polling manual, cabang PollingResult::PollingError menerima
error polling yang disimulasikan:
Kode pengujian lengkap
Bagian berikut menunjukkan kode lengkap untuk pengujian yang dijelaskan dalam panduan ini.