Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision d1564e8a

Von Moritz Bunkus vor etwa 12 Jahren hinzugefügt

  • ID d1564e8aa44f920d0c9ddf08141417f0deb89ba6
  • Vorgänger 075be078
  • Nachfolger d00e1b28

Doku: Test-Doku aus t/README in die Haupt-Doku überführt & erweitert

Unterschiede anzeigen:

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 =&gt; 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