Єдина реальна логіка - це синтаксис запитів для зовнішнього 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
що він не вийде, але я також хочу, щоб люди могли змінити запит, щоб уточнити його, не потребуючи також змін тест.
Варіанти, які я розглядав:
Я можу заглушити api, але це було б занадто просто (перевірте, чи
id
є присутність у запиті, а потім повернути очікуваний набір даних, якщо він є, або несподіваний набір, якщо ні), занадто крихкий (перевірте, чи рядок запиту є саме те, що є у функції), або занадто складне (переконайтеся, що використаний запит синтаксично правильний і призведе до повернення правильних даних).Я міг би подати запит до справжнього api, але очікувані результати можуть змінюватися з часом, коли змінюються дані зовнішньої системи, поза контролем тестової системи.
Я міг би подивитися на налаштування тестової установки справжнього api для контролю даних, які він має, але це докладе багато зусиль.
Я схиляюся до №2 і роблю це ще одним тестом на інтеграцію, який не запускається часто і бачу, як часто зміни даних зовнішньої системи викликають тест на розрив. Я думаю, що це було б найпростіше на даний момент, але мені цікаво, чи існують альтернативи, про які я не замислююся, або кращі способи вирішити це питання. Будь-яка порада буде вдячна.