Changes between Initial Version and Version 1 of Documentatie/Ontwikkelaar/Omgeving/Unittests


Ignore:
Timestamp:
02/29/12 12:12:18 (14 years ago)
Author:
adriaan
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentatie/Ontwikkelaar/Omgeving/Unittests

    v1 v1  
     1= Unit Tests = 
     2 
     3OpenAC heeft een grote verzameling ''unit tests'' om de functionaliteit van het programma te testen. Hierbij wordt vooral de algoritmische- en data-kant van het programma getest. Er wordt niet stilgestaan bij de user interface (op enkele puntjes na). 
     4 
     5== Unit Tests Uitvoeren == 
     6 
     7In de {{{development/}}} branch en releases vanaf versie 2.000 staat er in de bovenste directory van OpenAC een file {{{unittests.py}}}. Dit is het "aandrijf" script van de unittests voor het gehele programma. Het kan worden opgestart vanaf de command-line als ieder ander Python programma: 
     8{{{ 
     9  Python25\python.exe unittests.py 
     10}}} 
     11 
     12Zonder argumenten, of wanneer je {{{--help}}} toevoegt, legt het script uit welke argumenten het accepteert. 
     13 
     14Meestal ben je geinteresseerd in alle unittests voor OpenAC, toegepast op je eigen adaptatie. Dan gebruik je 
     15{{{ 
     16  Python25\python.exe unittests.py --enable-all -a <adaptatie> 
     17}}} 
     18Vul voor {{{<adaptatie>}}} de naam van je adaptatie in, zoals "amsterdam" of "drenthe" ("ac_amsterdam" mag ook). 
     19 
     20De unit tests produceren heel veel uitvoer met aan het eind een overzicht van hoeveel tests er zijn uitgevoerd, hoeveel er mis zijn gegaan. Dat ziet er zo uit: 
     21{{{ 
     22Ran 352 tests in 55.550s 
     23FAILED (failures=15, errors=3) 
     24}}} 
     25Er zit een handvol verwachte failures in de unittests, waar OpenAC dingen niet doet zoals we het verwachten (in bijzondere randgevallen). Errors geven aan dat er een probleem is in de OpenAC code die niet goed wordt afgevangen. Errors in de unittests kunnen direct als defect worden gerapporteerd in het [/newticket tickets systeem].  
     26 
     27Om alleen de unit tests van een enkele kernmodule uit te voeren (bijvoorbeeld de Grouper), gebruik de argumenten {{{--with-kern}}} en {{{-m}}}, zo: 
     28{{{ 
     29  Python25\python.exe unittests.py --with-kern -m grouper 
     30}}} 
     31Na {{{-m}}} mag een komma-gescheiden lijst van kernmodulenamen staan; de namen worden gezocht in alle kernmodules, dus "grouper" selecteert de unit tests van alle kernmodules waar het woord "grouper" in de naam voorkomt (dat is er maar een, ''e080_grouper'', maar als je {{{-m hl7,dos}}} gebruikt krijg je de tests van zeven modules). 
     32 
     33== Unit Tests Schrijven == 
     34 
     35Unit tests worden traditioneel opgeslagen in een bestand {{{unittests.py}}} in de desbetreffende directory. We streven ernaar om alle kernmodules een pakket unit tests te geven. Daarnaast hebben de directories {{{include/}}} en {{{logica/}}} tests '''en''' de adaptaties kunnen hun eigen unit tests hebben om lokale functionaliteit te testen. 
     36 
     37De makkelijkste manier om een test te schijven is om een bestaand voorbeeld te volgen. Elk unit test bestand heeft de volgende structuur: 
     38 
     39{{{ 
     40  import unittest 
     41  from include import testhelpers 
     42 
     43  class MijnTest(testhelpers.TestCaseMetLogin): 
     44    def test_iets(self): 
     45       <de test> 
     46 
     47  def suite(): 
     48    suite = unittest.TestSuite() 
     49    suite.addTest(unittest.makeSuite(MijnTest)) 
     50}}} 
     51 
     52Een test is een functie in een test-klasse. Een unit test kan meerdere test-klassen bevatten, en een klasse kan meerdere tests bevatten. De klassen en functies zijn vooral een manier om de tests te organiseren en te structureren. De tests worden uiteindelijk in alfabetische volgorde binnen elke klasse uitgevoerd. 
     53 
     54Voor volledige documentatie zie [http://docs.python.org/library/unittest.html de Python documentatie voor de unittest module]. '''NB.''' OpenAC gebruikt Python 2.5 en de huidige versie van de documentatie is voor Python 2.7, dus let op de "''Since 2.6''" en dergelijke compatibiliteits-informatie.