Skip to content
qaumann edited this page Apr 17, 2018 · 2 revisions

Allgemeines

Für alle Teile des Codes (Elemente, Solver, Funktionen, ...) sollten Tests vorhanden sein. Diese Tests müssen immer erfolgreich durchgeführt werden, so soll vermieden werden, dass durch Änderungen im Programmcode versehentlich andere Teile des Programms beeinträchtigt werden. Nach jeder größeren Änderung und auch zwischendurch sollte mit dem Kommando runTests überprüft werden, ob der Code noch richtig arbeitet.

Die Tests sind zu verschiedenen Kategorien zusammengefasst und sollten bei der Einführung neuer Programmteile entsprechend erweitert werden:

  • AssemblerTests: Testet, ob die verschiedenen Assembler richtige Ergebnisse liefern
  • ElementTests: Für jedes Element sollte mindestens ein Test zur Verfügung stehen, der eine statische Berechnung überprüft. Soll das Element auch mit anderen Berechnungsarten (dynamisch, harmonisch, ...) verwendet werden, sind dafür auch Tests anzulegen
  • SolverTests: Testet die Ergebnisse der einzelnen Solver (statisch, dynamisch, ...)
  • ValidationTests: Größere Testprobleme, die viele verschiedene Programmfunktionen enthalten

Prinzipiell sollte ein Test von so wenig Programmteilen wie möglich abhängen, um etwaige Fehler schnell eingrenzen zu können. Auch sollten die Tests in wenigen Sekunden durchgeführt werden können. Ausgenommen sind die ValidationTests, bei denen auch größere Probleme getestet werden.

Testen des Codes

Im Ordner tests befindet sich das Skript runTests, mit dem alle Tests auf einmal durchgeführt werden können. Wird beim Aufruf der Parameter small verwendet, werden alle Tests bis auf die Validierungstests durchgeführt, der Parameter validation startet nur diese.

Einzelne Testskripte, die von matlab.unittest.TestCase abgeleitet sind, können mit run(SKRIPTNAME) gestartet werden.

Implementierung

Matlab bietet vorgefertigte Funktionen, die das Testen von Programmteilen erlauben. Die Testskripte müssen von der Klasse matlab.unittest.TestCase erben und die Methoden müssen mit dem Parameter (Test) versehen werden. Jeder Test ist eine Funktion und hat den Parameter TestCase als Übergabeparameter. Ein simpler Test könnte zum Beispiel so aussehen:

function myTest(testCase)
    import matlab.unittest.constraints.IsEqualTo
    import matlab.unittest.constraints.AbsoluteTolerance

    actualResult = 1 + 1;
    expectedResult = 2;

    testCase.assertThat(actualResult, IsEqualTo(expectedResult, ...
        'Within', AbsoluteTolerance(1e-7)))
end

Hier wird geprüft ob das erwartete Ergebnis expectedResult mit dem berechneten Ergebis actualResult mit einer absoluten Toleranz von 1e-7 übereinstimmt.

Clone this wiki locally