ตรรกะจริงเท่านั้นอยู่ในไวยากรณ์แบบสอบถามสำหรับ API ภายนอก ฉันไม่ต้องการทดสอบว่าจะสอบถาม api หรือไม่ฉันต้องการทดสอบว่าจะทำการสอบถามด้วยวิธีการที่จะส่งคืนข้อมูลที่ถูกต้องหรือไม่ ตัวอย่างเช่นบางรหัสหลอก:
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;
}
ตัวอย่างที่เป็นรูปธรรมมากขึ้นด้วย API ที่สร้างขึ้น:
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;
}
The query is in a syntax custom to the API and is complex and there are multiple ways to achieve the same or similar results. The purpose of the function is not to get data identified by id
but to find a subset of other data based on a fuzzy relationship to the data identified by id
that also meets a few other requirements. The other requirements are always the same regardless of id
but may change over time as the system is modified. For example, if the example api added support for gravity information, we may want to change the query to also use gravity to refine the results. Or maybe we come up with a more efficient way to check the temp range, but it doesn't change the results.
สิ่งที่ฉันต้องการทดสอบคือสำหรับอินพุตid
ที่กำหนดชุดข้อมูลที่ถูกต้องจะถูกส่งกลับ ฉันต้องการทดสอบสิ่งนี้เพื่อที่ว่าหากใครซักคนทำให้แบบสอบถามไม่ส่งคืนข้อมูลที่ถูกต้องตามid
ที่มันจะล้มเหลวอีกต่อไป แต่ฉันต้องการให้ผู้ใช้สามารถแก้ไขแบบสอบถามเพื่อปรับแต่งได้โดยไม่ต้องปรับเปลี่ยนอีก การทดสอบ
ตัวเลือกที่ฉันได้พิจารณา:
ฉันสามารถ stub api แต่นั่นอาจจะง่ายเกินไป (ตรวจสอบว่า
id
มีอยู่ในแบบสอบถามแล้วส่งคืนชุดข้อมูลที่คาดหวังหากเป็นหรือชุดที่ไม่คาดคิดหากไม่ได้) เปราะเกินไป (ตรวจสอบว่าสตริงแบบสอบถามนั้นคืออะไร สิ่งที่อยู่ในฟังก์ชั่น) หรือซับซ้อนเกินไป (ตรวจสอบว่าแบบสอบถามที่ใช้นั้นถูกต้องทางไวยากรณ์และจะส่งผลให้ข้อมูลที่ถูกต้องถูกส่งกลับ)ฉันสามารถส่งแบบสอบถามไปยัง API จริง แต่ผลลัพธ์ที่คาดหวังสามารถเปลี่ยนแปลงได้ตลอดเวลาเมื่อข้อมูลในระบบภายนอกเปลี่ยนแปลงไปนอกการควบคุมของระบบทดสอบ
ฉันสามารถดูการตั้งค่าการติดตั้งทดสอบของ API จริงเพื่อควบคุมข้อมูลที่มี แต่นั่นเป็นความพยายามอย่างมาก
ฉันเอนตัวไปที่ # 2 และทำให้การทดสอบการรวมกลุ่มนี้ทำงานได้ไม่บ่อยนักและดูว่าการเปลี่ยนแปลงในข้อมูลของระบบภายนอกบ่อยเพียงใดทำให้การทดสอบหยุดชะงัก ฉันคิดว่าตอนนี้จะง่ายที่สุด แต่ฉันสงสัยว่ามีทางเลือกอื่นที่ฉันไม่ได้คิดหรือวิธีที่ดีกว่าในการจัดการกับปัญหานี้ คำแนะนำใด ๆ ที่จะได้รับการชื่นชม.