-
Notifications
You must be signed in to change notification settings - Fork 0
Tests
Das Interface CurrentConverter (Implementierung in SadCurrentConverter) stellt Methoden zur Verfügung, die zur Konvertierung digitaler oder analoger Werte anderer Smarthome-Systeme in Minecraft Redstone-Signalstärke (ein ganzzahliger Wert von 0 bis 15) und zurück genutzt werden können. Die Werte anderer Systeme (nachfolgend "Zustand") sind natürliche Zahlen mit angegebener Obergrenze.
Dabei sollen folgende Regeln eingehalten werden:
-
0 wird zu 0
-
NUR 0 wird zu 0
-
der höchstmögliche Zustand wird zur höchstmöglichen Signalstärke und umgekehrt.
-
die restlichen Werte sollen möglichst linear interpoliert werden, ohne die anderen Regeln zu verletzen.
Um die Einhaltung einiger dieser Regeln sicherzustellen, wurden Testfälle geschrieben. Zunächst exisitieren verschiedene Tests, die das Übergeben ungültiger Werte (z.B. negative Werte oder Signalstärken über 15) sowie ungültiger Kombinationen von Werten (ein Zustand, der über dem angegebenen Limit liegt) testen. In diesem Fall wird das Werfen einer Exception erwartet.
Aktuell existieren nur Tests mit digitalen Zuständen. Dabei werden Regel 1 und 3 von vier Tests (2 für je zwei Richtungen) behandelt. Außerdem werden die direkten Nachbarn der Signalstärke 0 und 15, nämlich 1 und 14 sowie ein Wert dazwischen getestet. Dass Regel 4 stimmt, wird also nur angenommen. Basierend auf dieser Annahme lässt sich jedoch die Einhaltung von Regel 2 schlussfolgern, da durch die Prüfung der direkten Nachbarn von 0 und 15 kein Zustand, der wie 0 nicht dazwischen liegt, mehr erreicht werden kann.
Die Tests sind automatisiert. Das bedeutet, dass sie im normalen Build Prozess mitausgeführt werden und dieser abgebrochen wird, falls mindestens ein Test fehlschlägt.
Zum Hinzufügen und Entfernen von Geräten im Minecraft Smarthome werden Befehle verwendet, die im Spielchat eingegeben werden. Das Interface MinecraftCommandArgumentParser, das von der Klasse SadMinecraftCommandArgumentParser implementiert wird, stellt Methoden zur Konvertierung der Argumente des Befehls zu intern verwendeten Datentypen zur Verfügung. In SadMinecraftCommandArgumentParserTest wird diese Implementierung getestet. Zur Instantiierung des Parsers werden eine BlockIdentifierFactory und eine WorldIdentifierFactory per Dependency Injection benötigt. Beim Aufruf der Methode extractBlockIdentifier wird außerdem eine MinecraftCommandSource als Parameter erwartet. Zum Testen müssen diese Objekte gemockt werden. Diese drei Interfaces werden daher von drei handgeschriebenen Dummy-Klassen in der Test-Klasse implementiert.