La seule vraie logique réside dans la syntaxe de requête de l'API externe. Je ne veux pas tester s'il interroge l'API, je veux tester qu'il l'interroge de manière à ce que les données correctes soient renvoyées. Par exemple, certains pseudo-code:
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;
}
Un exemple plus concret avec une API composée:
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.
Ce que je veux tester, c'est que pour une entrée donnée, id
l'ensemble de données correct est renvoyé. Je veux tester cela afin que si quelqu'un gâche la requête de telle sorte qu'elle ne renvoie plus les données correctes en fonction de id
cela, elle échouera, mais je veux également que les gens puissent modifier la requête pour l'affiner sans avoir besoin de la modifier également. le test.
Options que j'ai envisagées:
Je pourrais bloquer l'api, mais ce serait soit trop simple (vérifiez que le
id
est présent dans la requête, puis retournez un ensemble de données attendu s'il l'est ou un ensemble inattendu sinon), trop fragile (vérifiez que la chaîne de requête est exactement ce qui se trouve dans la fonction), ou trop complexe (vérifiez que la requête utilisée est syntaxiquement correcte et entraînera le retour des données correctes).Je pourrais soumettre la requête à la vraie API, mais les résultats attendus pourraient changer au fil du temps à mesure que les données du système externe changent, en dehors du contrôle du système de test.
Je pourrais envisager de configurer une installation de test de la véritable API afin de contrôler les données dont elle dispose, mais cela demande beaucoup d'efforts.
Je me penche vers le n ° 2 et en fais plus un test d'intégration qui n'est pas souvent exécuté et je vois à quelle fréquence les changements dans les données du système externe provoquent la rupture du test. Je pense que ce serait plus simple pour l'instant, mais je me demande s'il existe des alternatives auxquelles je ne pense pas ou de meilleures façons de résoudre ce problème. Tout avis sera le bienvenu.