Satu-satunya logika nyata adalah dalam sintaks kueri untuk API eksternal. Saya tidak ingin menguji apakah ia meminta api, saya ingin menguji apakah ia menanyakannya sedemikian rupa sehingga data yang benar akan dikembalikan. Sebagai contoh, beberapa kode semu:
function retrieve_related_data(id)
{
query = "[potentially long, syntactically complex query that
uses param id to get some data]";
results = api_wrapper.query(query);
return results;
}
Contoh yang lebih konkret dengan API buatan:
function retrieveLifeSupportingObjectsWithinRegion(id)
{
query = "
within region(" + id + ") as r
find objects matching hydration>0 and temp_range has 75
send name, id, relative(position, r)
";
results = astronomicalObjectApiWrapper.query(query);
return results;
}
Kueri dalam kustom sintaksis untuk API dan kompleks dan ada beberapa cara untuk mencapai hasil yang sama atau mirip. Tujuan dari fungsi ini bukan untuk mendapatkan data yang diidentifikasi oleh id
tetapi untuk menemukan subset dari data lain berdasarkan pada hubungan fuzzy dengan data yang diidentifikasi oleh id
yang juga memenuhi beberapa persyaratan lainnya. Persyaratan lain selalu sama terlepas dari id
tetapi dapat berubah seiring waktu ketika sistem dimodifikasi. Misalnya, jika contoh api menambahkan dukungan untuk informasi gayaberat, kami mungkin ingin mengubah kueri untuk juga menggunakan gayaberat untuk menyaring hasilnya. Atau mungkin kita menemukan cara yang lebih efisien untuk memeriksa rentang temp, tetapi itu tidak mengubah hasilnya.
Yang ingin saya uji adalah bahwa untuk input yang diberikan id
set data yang benar dikembalikan. Saya ingin menguji ini sehingga jika seseorang mengacaukan kueri sehingga tidak lagi mengembalikan data yang benar berdasarkan id
itu akan gagal, tapi saya juga ingin orang dapat memodifikasi kueri untuk memperbaikinya tanpa perlu juga memodifikasi ujian.
Opsi yang saya pertimbangkan:
Saya bisa mematikan api, tetapi itu bisa terlalu sederhana (periksa
id
apakah ada dalam kueri dan kemudian mengembalikan set data yang diharapkan jika itu atau set yang tidak terduga jika tidak), terlalu rapuh (periksa apakah string kueri persis apa yang ada dalam fungsi), atau terlalu rumit (periksa apakah permintaan yang digunakan benar secara sintaksis dan akan menghasilkan data yang benar dikembalikan).Saya dapat mengirimkan kueri ke api nyata, tetapi hasil yang diharapkan dapat berubah seiring waktu karena data dalam sistem eksternal berubah, di luar kendali sistem pengujian.
Saya bisa melihat menyiapkan uji coba api nyata untuk mengontrol data yang dimilikinya, tapi itu banyak usaha.
Saya condong ke arah # 2 dan menjadikan ini lebih sebagai tes integrasi yang tidak sering dijalankan dan melihat seberapa sering perubahan dalam data sistem eksternal menyebabkan tes rusak. Saya pikir itu akan menjadi paling sederhana untuk saat ini, tetapi saya bertanya-tanya apakah ada alternatif yang tidak saya pikirkan atau cara yang lebih baik untuk mengatasi masalah ini. Nasihat apa pun akan dihargai.