tl.testing biedt verschillende hulpprogramma's die kunnen worden gebruikt bij het schrijven van testen & nbsp;. Het is compatibel met Python versies 2.6 en 2.7.
Zandbakken van mappen en bestanden
Bij het testen van code die mappen en bestanden wijzigt, is het nuttig om te kunnen eenvoudig en inspecteren van een boom in de steekproef van mappen en bestanden. De tl.testing.fs module biedt ondersteuning voor het creëren van een boom van een tekstuele beschrijving, het te noemen in hetzelfde formaat en schoon te maken na zelf.
In een doc-test, kunnen deze voorzieningen worden gebruikt als deze te maken en een lijst van een map, een bestand en een symbolische link:
>>> Van tl.testing.fs import new_sandbox, ls
>>> New_sandbox ("" "
... D foo
... F foo / bar asdf
... L baz -> foo / bar
... "" ")
>>> Ls ()
l baz -> foo / bar
d foo
f foo / bar asdf
Zie het bestand fs.txt gevonden met de broncode voor verder advies, met inbegrip van het opzetten en afbreken van proeven met file-systeem zandbakken.
Het installeren van opvraagbare scripts
Sommige functies men zou willen testen maakt gebruik van externe programma's zoals een pager of een tekstverwerker. De tl.testing.script module biedt hulpprogramma's die eenvoudig mock scripts te installeren op plaatsen waar de code te testen zal ze vinden. Ze nemen een reeks van Python-code en maak een wrapper script dat de Python pad sets te overeenkomt met dat van de test en loopt de code.
Zo zo'n mock script kan worden gebruikt in een document proef:
>>> Van tl.testing.script import installeren
>>> Script_path = installeren ('print' Een eenvoudig script. '')
>>> Print geopend (script_path) .Lees ()
#! ...
import sys
sys.path [:] = [...]
print 'Een eenvoudig script.'
>>> Import deelproces
>>> Sub = subprocess.Popen (script_path, shell = True, stdout = subprocess.PIPE)
>>> Stdout, stderr = sub.communicate ()
>>> Print stdout
Een eenvoudig script.
Zie het bestand script.txt gevonden met de broncode voor verdere mogelijkheden hoe te installeren en toegang mock scripts en hoe af te breken tests met mock scripts.
-Doc testen van de grafische inhoud van cairo oppervlakken
Hoewel het ongecompliceerd om de inhoud van twee Cairo oppervlakken Python code vergelijken, stapelaars grafiek buiten doc testen. Echter, kan de manuel pakket worden gebruikt om meer algemene testcases te extraheren uit een tekstdocument terwijl ze te mixen met doc testen op een natuurlijke manier.
De tl.testing.cairo module biedt een test suite fabriek die manuel gebruikt om grafische testen geformuleerd als geherstructureerd-tekst cijfers uit te voeren. Het bijschrift van een dergelijke figuur wordt verondersteld een letterlijke Python expressie waarvan de waarde is een cairo oppervlak, en haar beeld wordt gebruikt als de test verwachting.
Dit is hoe een oppervlak kan worden vergeleken met een verwacht afbeelding in een doc-test:
>>> Import cairo
>>> Van pkg_resources import resource_filename
>>> Image = resource_filename ('tl.testing', 'testimages / correct.png')
.. Figuur :: tl / testen / testimages / correct.png
& Nbsp; `` cairo.ImageSurface.create_from_png (afbeelding) ``
Zie het bestand cairo.txt gevonden met de broncode voor verder advies en documentatie van de mogelijke testuitgang.
Werken met draden in de test code
De standaard testcase klasse geen fouten en mislukkingen die zich in andere threads dan de belangrijkste verzamelen. De tl.testing.thread module biedt draad klassen en een ThreadAwareTestCase klasse om dat, evenals een aantal andere gemakken voor tests die zich bezighouden met onderwerpen die mogelijk maken: het voorkomen verwachte onverwerkte uitzonderingen in discussies wordt afgedrukt met de test-uitgang, rapportage discussies achtergelaten door een test, hardlopen code in een daemon draad, de toetreding tot draden en het tellen van de onderwerpen die gestart zijn tijdens de test run tijd:
>>> Import tijd
>>> Import tl.testing.thread
>>> Klasse SampleTest (tl.testing.thread.ThreadAwareTestCase):
...
... Def test_error_in_thread_should_be_reported (zelf):
... Met tl.testing.thread.ThreadJoiner (1):
... Self.run_in_thread (lambda: 1/0)
...
... Def test_active_count_should_count_only_new_threads (zelf):
... Met tl.testing.thread.ThreadJoiner (1):
... Self.run_in_thread (lambda: time.sleep (0,1))
... Self.assertEqual (1 self.active_count ())
... Self.assertEqual (0, self.active_count ())
>>> Import unittest
>>> Run (unittest.makeSuite (SampleTest))
================================================== ====================
FOUT: test_error_in_thread_should_be_reported (__builtin __ SampleTest.)
-------------------------------------------------- --------------------
Traceback (meest recente oproep vorige):
& Nbsp; ...
ZeroDivisionError: integer deling of modulo door nul
-------------------------------------------------- --------------------
Rende 2 testen in N.NNNs
FAILED (fouten = 1)
Zie het bestand thread.txt gevonden met de broncode voor de verdere details van de ThreadAwareTestCase klasse.
Het construeren testsuites dat manuel gebruiken
Zoals manuel biedt een aantal krachtige functies naast de standaard doctests, worden manuel testsuites opgezet enigszins anders uit standaard zijn. De tl.testing.doctest module implementeert een DocFileSuite fabriek die kan worden gebruikt als de standaard een, maar creëert een test suite met Manuel en voorziet in een aantal extra configuratie gerelateerd aan manuel, onder hen de mogelijkheid om voetnoten die gebruikt worden gedaan met behulp van de afgekeurde interpreteren zope.testing.doctest:
>>> Sample_txt = write ('sample.txt', "" "
... [#footnote] _
... >>> X
... 1
...
... .. [#footnote]
... >>> X = 1
... "" ")
>>> Van tl.testing.doctest import DocFileSuite
>>> Run (DocFileSuite (sample_txt, voetnoten = True))
-------------------------------------------------- --------------------
Ran 1-test in N.NNNs
OK
>>> Sample_txt = write ('sample.txt', "" "
... .. Code-blok :: python
... X = 1
...
... >>> X
... 1
... "" ")
>>> Import manuel.codeblock
>>> Run (DocFileSuite (sample_txt, manuel = manuel.codeblock.Manuel ()))
-------------------------------------------------- --------------------
Ran 1-test in N.NNNs
OK
Eisen
- Python
Reacties niet gevonden