Erstellen von Mock-Services für die Testautomatisierung in Business Central

Jeder, der plant, eine Erweiterung in Microsofts AppSource zu veröffentlichen, wird schnell feststellen, dass er eigene Mock-Services für seine Testautomatisierung erstellen muss. Hier ist eine sehr kurze Anleitung, die Sie für Ihr Projekt anpassen können, wenn Sie den eingebauten HTTP-Client verwenden, um Daten an einen Webservice via GET/ POST zu senden oder empfangen.

Wenn Sie JSON-Daten von einem Webservice erhalten möchten, müssen Sie diese Aufrufe “fälschen”, da echte HTTP Verbindungen während der Tests nicht erlaubt sind.

Wir gehen davon aus, dass Sie eine Codeunit für den Aufbau der HTTP-Verbindung geschrieben haben. Wenn das der Fall ist – haben Sie einen großen Teil bereits geschafft! Wenn nicht, müssen Sie Ihren Code wahrscheinlich umstrukturieren und in eine separate Codeunit auslagern. Danach sind Sie startklar! Jetzt kommt der entscheidende Teil: Überall, wo Sie die Funktion der Codeunits zum Aufrufen des Webdienstes aufrufen, müssen Sie die Objekt-ID der Codeunit mit übergeben (z.B. durch ein Feld in einer Setup-Tabelle und eine Tabellenrelation zu “CodeUnit Metadata”.ID;). Dies ermöglicht es Ihrem Code, entweder die echte Codeunit oder die Mock-Codeunit auszuführen.

Da es (in den meisten Fällen) nicht möglich ist, das gesamte JSON (was getestet werden soll) in einen String zu packen, müssen Sie es “on the fly” selbst in Ihrer Mock Codeunit erstellen. Schreiben Sie eine Funktion, die Ihr JSON auf der Grundlage einer echten JSON-Nachricht des Webdienstes generiert. Lassen Sie die unnötigen Objekte weg, die Ihr Code ohnehin nicht verarbeiten wird.

Sie können Ihre JSON-Nachricht konstruieren, indem Sie Variablen in Ihrer Funktion erstellen und je nach Bedarf “JsonObject”, “JsonArray”, “JsonValue” usw. verwenden.

Wir erstellen dafür ein Text-Array und geben alle Daten ein.
Beispiel:
Wenn ein Teil des JSON das Key/Value-Paar “{“id”: “12345”}” ist, dann erstelle man das Objekt wie folgt:
JsonValueArray[1] := '12345';
JsonObject.Add('id', JsonValueArray[1]);

Wenn wir mehrere Einträge in einer JSON-Nachricht haben, verwenden wir ein 2-dimensionales Text-Array und ändern den Code leicht ab, um ihn in einer Schleife zu durchlaufen:

JsonValueArray[1][1] := '12345';
JsonValueArray[2][1] := '67890';

Innerhalb der Schleife dann:
JsonObject.Add('id', JsonValueArray[i][1]);

Natürlich ist dies nur ein kleiner Teil dessen, was Sie tatsächlich tun müssen. Aber wir hoffen, dass Ihnen das zumindest ein wenig Anleitung gibt, wie Sie Ihre JSON Mock-Services für Business Central Tests schreiben können, denn Microsoft lässt Sie ziemlich im Dunkeln was zu tun ist.