Die einzige echte Logik liegt in der Abfragesyntax für die externe API. Ich möchte nicht testen, ob die API abgefragt wird. Ich möchte testen, ob die API so abgefragt wird, dass die korrekten Daten zurückgegeben werden. Zum Beispiel ein Pseudocode:
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;
}
Ein konkreteres Beispiel mit einer erfundenen 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;
}
Die Abfrage hat eine an die API angepasste Syntax und ist komplex. Es gibt mehrere Möglichkeiten, die gleichen oder ähnliche Ergebnisse zu erzielen. Der Zweck der Funktion besteht nicht darin, Daten zu identifizieren, id
sondern eine Teilmenge anderer Daten zu finden, die auf einer unscharfen Beziehung zu den durch identifizierten Daten basiert id
, die auch einige andere Anforderungen erfüllt. Die anderen Anforderungen sind immer gleich id
, können sich jedoch im Laufe der Zeit ändern, wenn das System geändert wird. Wenn die Beispiel-API beispielsweise die Unterstützung für Schwerkraftinformationen hinzufügt, möchten wir die Abfrage möglicherweise ändern, um auch die Schwerkraft zu verwenden, um die Ergebnisse zu verfeinern. Oder wir haben eine effizientere Methode zur Überprüfung des Temperaturbereichs entwickelt, die die Ergebnisse jedoch nicht verändert.
Was ich testen möchte, ist, dass für eine bestimmte Eingabe id
der richtige Datensatz zurückgegeben wird. Ich möchte dies testen, damit, wenn jemand die Abfrage durcheinander id
bringt und nicht mehr die richtigen Daten zurückgibt , dies fehlschlägt. Ich möchte jedoch auch, dass die Abfrage geändert werden kann, um sie zu verfeinern, ohne dass Änderungen erforderlich sind der Test.
Optionen, über die ich nachgedacht habe:
Ich könnte die API stummschalten, aber das wäre entweder zu einfach (überprüfen Sie, ob die
id
in der Abfrage vorhanden ist, und geben Sie dann eine erwartete Menge von Daten zurück, wenn dies der Fall ist, oder eine unerwartete Menge, wenn dies nicht der Fall ist), zu spröde (überprüfen Sie, ob die Abfragezeichenfolge vorhanden ist genau das, was in der Funktion enthalten ist) oder zu komplex (stellen Sie sicher, dass die verwendete Abfrage syntaktisch korrekt ist und die richtigen Daten zurückgegeben werden).Ich könnte die Abfrage an die echte API senden, aber die erwarteten Ergebnisse könnten sich im Laufe der Zeit ändern, da sich die Daten im externen System außerhalb der Kontrolle des Testsystems ändern.
Ich könnte versuchen, eine Testinstallation der echten API einzurichten, um die darin enthaltenen Daten zu kontrollieren, aber das ist ein großer Aufwand.
Ich neige zu # 2 und mache dies eher zu einem Integrationstest, der nicht oft ausgeführt wird und sehe, wie oft Änderungen an den Daten des externen Systems dazu führen, dass der Test abgebrochen wird. Ich denke, das wäre im Moment am einfachsten, aber ich frage mich, ob es Alternativen gibt, über die ich nicht nachdenke, oder bessere Möglichkeiten, um dieses Problem anzugehen. Jeder Rat wäre dankbar.