Revision d1564e8a
Von Moritz Bunkus vor etwa 12 Jahren hinzugefügt
doc/dokumentation.xml | ||
---|---|---|
5429 | 5429 |
</sect2> |
5430 | 5430 |
</sect1> |
5431 | 5431 |
|
5432 |
<sect1 id="devel.testsuite"> |
|
5433 |
<title>Die kivitendo-Test-Suite</title> |
|
5434 |
|
|
5435 |
<sect2 id="devel.testsuite.intro"> |
|
5436 |
<title>Einführung</title> |
|
5437 |
|
|
5438 |
<para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para> |
|
5439 |
|
|
5440 |
<para>Die grundlegenden Fakten sind:</para> |
|
5441 |
|
|
5442 |
<itemizedlist> |
|
5443 |
<listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem> |
|
5444 |
|
|
5445 |
<listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem> |
|
5446 |
|
|
5447 |
<listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem> |
|
5448 |
|
|
5449 |
<listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren |
|
5450 |
Dateiname auf <literal>.t</literal> endet.</para></listitem> |
|
5451 |
</itemizedlist> |
|
5452 |
</sect2> |
|
5453 |
|
|
5454 |
<sect2 id="devel.testsuite.prerequisites"> |
|
5455 |
<title>Voraussetzungen</title> |
|
5456 |
|
|
5457 |
<para>Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:</para> |
|
5458 |
|
|
5459 |
<itemizedlist> |
|
5460 |
<listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core: |
|
5461 |
<literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem> |
|
5462 |
</itemizedlist> |
|
5463 |
</sect2> |
|
5464 |
|
|
5465 |
<sect2 id="devel.testsuite.execution"> |
|
5466 |
<title> |
|
5467 |
Existierende Tests ausführen |
|
5468 |
</title> |
|
5469 |
|
|
5470 |
<para>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt |
|
5471 |
gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para> |
|
5472 |
|
|
5473 |
<para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus |
|
5474 |
dem kivitendo-Basisverzeichnis heraus ausführen.</para> |
|
5475 |
|
|
5476 |
<para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para> |
|
5477 |
|
|
5478 |
<programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting> |
|
5479 |
</sect2> |
|
5480 |
|
|
5481 |
|
|
5482 |
<sect2 id="devel.testsuite.meaning_of_scripts"> |
|
5483 |
<title> |
|
5484 |
Bedeutung der verschiedenen Test-Scripte |
|
5485 |
</title> |
|
5486 |
|
|
5487 |
<para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch |
|
5488 |
während der Entwicklung nützliche Tests sind:</para> |
|
5489 |
|
|
5490 |
<itemizedlist> |
|
5491 |
<listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem> |
|
5492 |
<listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem> |
|
5493 |
<listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem> |
|
5494 |
<listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem> |
|
5495 |
<listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem> |
|
5496 |
<listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem> |
|
5497 |
</itemizedlist> |
|
5498 |
|
|
5499 |
<para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para> |
|
5500 |
</sect2> |
|
5501 |
|
|
5502 |
<sect2 id="devel.testsuite.create_new"> |
|
5503 |
<title> |
|
5504 |
Neue Test-Scripte erstellen |
|
5505 |
</title> |
|
5506 |
|
|
5507 |
<para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende |
|
5508 |
Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para> |
|
5509 |
|
|
5510 |
<sect3 id="devel.testsuite.ideas_for_non_function_tests"> |
|
5511 |
<title> |
|
5512 |
Ideen für neue Test-Scripte, die keine konkreten Funktionen testen |
|
5513 |
</title> |
|
5514 |
|
|
5515 |
<para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para> |
|
5516 |
|
|
5517 |
<itemizedlist> |
|
5518 |
<listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem> |
|
5519 |
<listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem> |
|
5520 |
<listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem> |
|
5521 |
<listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem> |
|
5522 |
<listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem> |
|
5523 |
<listitem><para>Test, ob alle Webseiten-Templates in <filename>templates/webpages</filename> mit vom Perl-Modul <literal>Template</literal> compiliert werden können</para></listitem> |
|
5524 |
</itemizedlist> |
|
5525 |
</sect3> |
|
5526 |
|
|
5527 |
<sect3 id="devel.testsuite.directory_and_test_names"> |
|
5528 |
<title> |
|
5529 |
Konvention für Verzeichnis- und Dateinamen |
|
5530 |
</title> |
|
5531 |
|
|
5532 |
<para>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:</para> |
|
5533 |
|
|
5534 |
<itemizedlist> |
|
5535 |
<listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem> |
|
5536 |
|
|
5537 |
<listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise |
|
5538 |
<filename>bad_function_params.t</filename>).</para></listitem> |
|
5539 |
|
|
5540 |
<listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen |
|
5541 |
(beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem> |
|
5542 |
|
|
5543 |
<listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist |
|
5544 |
(z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem> |
|
5545 |
</itemizedlist> |
|
5546 |
</sect3> |
|
5547 |
|
|
5548 |
<sect3 id="devel.testsuite.minimal_example"> |
|
5549 |
<title> |
|
5550 |
Minimales Skelett für eigene Scripte |
|
5551 |
</title> |
|
5552 |
|
|
5553 |
<para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para> |
|
5554 |
|
|
5555 |
<programlisting>use Test::More tests => 0; |
|
5556 |
|
|
5557 |
use lib 't'; |
|
5558 |
|
|
5559 |
use Support::TestSetup; |
|
5560 |
|
|
5561 |
Support::TestSetup::login();</programlisting> |
|
5562 |
|
|
5563 |
<para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie |
|
5564 |
<varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei |
|
5565 |
<filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen |
|
5566 |
sein. Dieser wird für die Datenbankverbindung benötigt.</para> |
|
5567 |
|
|
5568 |
<para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code> |
|
5569 |
weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para> |
|
5570 |
</sect3> |
|
5571 |
</sect2> |
|
5572 |
</sect1> |
|
5573 |
|
|
5432 | 5574 |
<sect1 id="devel.style-guide"> |
5433 | 5575 |
<title>Stil-Richtlinien</title> |
5434 | 5576 |
|
Auch abrufbar als: Unified diff
Doku: Test-Doku aus t/README in die Haupt-Doku überführt & erweitert