kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul Test::More.
Die grundlegenden Fakten sind:
Alle Tests liegen im Unterverzeichnis t/.
Ein Script (bzw. ein Test) in f/ enthält einen oder mehrere Testfälle.
Alle Dateinamen von Tests enden auf .t. Es sind selbstständig ausführbare Perl-Scripte.
Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in f/, deren
          Dateiname auf .t endet.
Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:
                     Test::Deep (Debian-Paketname: libtest-deep-perl; Fedora Core:
          perl-Test-Deep; openSUSE: perl-Test-Deep)
                     Test::Exception (Debian-Paketname: libtest-exception-perl; Fedora Core:
          perl-Test-Exception; openSUSE: perl-Test-Exception)
                     Test::Output (Debian-Paketname: libtest-output-perl; Fedora Core:
          perl-Test-Output; openSUSE: perl-Test-Output)
                     Test::Harness 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
          Perl-Distribution und kann für frühere Versionen aus dem CPAN bezogen
          werden.
Weitere Voraussetzung ist, dass die Testsuite ihre eigene Datenbank anlegen kann, um Produktivdaten nicht zu gefährden. Dazu
        müssen in der Konfigurationsdatei im Abschnit testing/database Datenbankverbindungsparameter angegeben
        werden. Der hier angegebene Benutzer muss weiterhin das Recht haben, Datenbanken anzulegen und zu löschen.
Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt
        gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript t/test.pl.
Will man die komplette Test-Suite ausführen, so muss man einfach nur t/test.pl ohne weitere Parameter aus
        dem kivitendo-Basisverzeichnis heraus ausführen.
Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an t/test.pl. Beispielsweise:
t/test.pl t/form/format_amount.t t/background_job/known_jobs.t
Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch während der Entwicklung nützliche Tests sind:
                     t/001compile.t -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab
                     t/002goodperl.t -- überprüft alle Perl-Dateien auf Anwesenheit von 'use strict'-Anweisungen
                     t/003safesys.t -- überprüft Aufrufe von system() und exec() auf Gültigkeit
                     t/005no_tabs.t -- überprüft, ob Dateien Tab-Zeichen enthalten
                     t/006spelling.t -- sucht nach häufigen Rechtschreibfehlern
                     t/011pod.t -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit
Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.
Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.
Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:
Überprüfung auf fehlende symbolische Links
Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)
Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)
Überprüfung auf Leerzeichen am Ende von Zeilen
Test, ob alle zu übersetzenden Strings in locale/de/all vorhanden sind
Test, ob alle Webseiten-Templates in templates/webpages mit vom Perl-Modul Template compiliert werden können
Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen:
Die Dateiendung muss .t lauten.
Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
            bad_function_params.t).
Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
            (beispielsweise background_jobs für Tests rund um Hintergrund-Jobs).
Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.
Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:
use Test::More tests => 0; use lib 't'; use Support::TestSetup; Support::TestSetup::login();
Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
          $::auth, $::form oder $::lxdebug), so muss in der Konfigurationsdatei
          config/kivitendo.conf im Abschnitt testing.login ein gültiger Login-Name eingetragen
          sein. Dieser wird für die Datenbankverbindung benötigt.
Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile Support::TestSetup::login();
          weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.