Test Automatisierung

Warum Testen?

Die Automatisierung von Tests ist meiner Meinung nach eines der wichtisten Themen, da es langfristig Zeit und damit Geld spart. Somit ist automatisiertes Testen im Grunde essenziell für jedes einzelne Projekt mit einem Umfang der größer als 3 Mann-Monate ist. Ich verwende drei grundlegende und wichtige Arten des Testens: -Unit Tests -Integration Tests -End 2 End Tests Damit teste ich automatisch jeden einzelnen Bereich meines Projektes, von kleinen Berechnungen bis zu großen Workflows, was in stetig größer werdenden Projekten das wichtigste ist um Qualität zu gewährleisten und die Performance der Entwicklung aufrecht zu erhalten.

Backend

C#, .NET Core

Es gibt eine Reihe von Test-Frameworks, und mit den meisten habe ich bereits gearbeitet. In diesem Projekt verwende ich xUnit. Das wichtigste ist aber nicht das Framework, sondern überhaupt erst mit Tests anzufangen!

jira dasjboard
Unit Tests

Alle wichtigen logischen Funktionen teste ich mit Unit Tests. Damit wird das Verhalten von speziell einer Komponente getestet, alle verwendeten anderen Komponenten werden 'gefaked' (dazu verwende ich Moq). Vorteil: Diese Tests laufen super schnell, und nehmen dem Test die Komplexität, da sie sich rein auf eine Funktion ohne Abhängigkeiten beziehen. Nachteil: Beziehungen zwischen verschiedenen Komponenten werden nicht getestet.

jira dasjboard
Integration Tests

Das komplette API wird durch Integration Tests getestet. In diesen Tests wird (fast) nichts gemockt, sondern ein kompletter Workflow von Start bis Ende getestet. In meinem Fall ist die Hauptänderung eine Inmemory-Sqlite Datenbank mit vorgeladenen Testdaten. Das sorgt dafür, das jeder Test komplett unabhängig voneinander abläuft, und ich komplexe Fälle durch fertige Testdaten einfach abtesten kann. Vorteil: Tests von kompletten Workflows. Nachteil: Langsamer, bei komplexen Workflows kann es sein, dass nicht direkt klar ist was den Fehler verursacht hat

Frontend

Typescript, Angular

jira dasjboard
Unit Tests

Mit Angular kommt automatisch das Jasmin Test Framework. Dieses bietet die Möglichkeit, einzelne Seiten komplett durch zu testen. Das bedeutet erstens die Logik in den Controllern, und zweitens die Elemente im generierten DOM. Wenn man Jasmine effizient verwendet kann man hier eine sehr große Palette an Fehlermöglichkeiten durch Tests im vorhinein ausschließen.

End2End Tests

Typescript

jira dasjboard
End2End Tests

End2End Tests testen das komplette System, mit allen beteiligten Komponenten. Gute End2End Tests ersetzen Tester, die die Applikation manuell durch testen. Angefangen habe ich im Projekt mit Protractor E2E Tests, da diese für Angular Projekte am meisten verbreitet waren, ich habe aber nach ein paar Monaten zu Cypress gewechselt. Dieses Framework ist allen älteren (wie Protractor) weit überlegen, da es Features wie ein übersichtliches UI, einfaches Debugging oder einen automatisch asynchronen Ablauf bietet. Vorteile: Bietet für den geringsten Aufwand die größtmögliche Testabdeckung, mit eingeschlossen das Workflow zwischen verschiedenen Systemen (Backend, Frontend, Datenbanken, ...). Nachteile: Längere Laufzeit

Brauchst du Unterstützung?

Wenn du gern Unterstützung hättest automatisierte Tests in deinem Projekt einzuführen oder auszubauen: Melde dich bei mir, ich helfe gerne!

office [at] bassa-solutions.at