Важно
Prevod je zajednički napor možete se pridružiti. Ova stranica je trenutno prevedena na |translation progress||.
3. Pisanje koda u PyQGIS knjizi
Ako planirate da dodate ili ažurirate neka poglavlja u Priručnik za programere PyQGIS-a, onda bi trebalo da sledite neka pravila kako biste omogućili automatsko testiranje isečaka koda.
Testiranje je zaista važno jer omogućava automatsku proveru koda. Isečci koda sa greškama ili kod koji koristi zastarele metode neće uspeti, a obaveštenje će vam pomoći da rešite probleme.
Za testiranje koristimo Sphinx doctest ekstenziju. Za detaljnije informacije pogledajte dokumentaciju o ekstenziji.
3.1. Kako napisati testirane fragmente koda
Pisanje testabilnih fragmenata koda se ne razlikuje toliko od stare metode. U osnovi, potrebno je da koristite drugačiju Sphinx direktivu.
3.1.1. Direktive Doctest sphinx-a
Umesto ugrađivanja koda u direktivu „.. code-block::python“ (što bi automatski istaklo sintaksu koda), sada ga treba ugraditi u „.. testcode::``. To jest, umesto ovoga:
.. code-block:: python
crs = QgsCoordinateReferenceSystem("EPSG:4326")
assert crs.isValid()
Sada koristite ovo:
.. testcode::
crs = QgsCoordinateReferenceSystem("EPSG:4326")
assert crs.isValid()
Nakon što ste napisali primer koda, trebalo bi da dodate tvrdnju koja će proceniti kod i koja će se automatski pokrenuti.
U gornjem primeru, kreirate crs i pomoću assert crs.isValid() testirate da li je validan. Ako kod ima pogrešnu sintaksu Pajtona ili crs.isValid() vrati False, ovaj isečak koda će biti neuspešan tokom testiranja.
Da biste uspešno pokrenuli testove na fragmentima koda, morate da uvezete sve klase i deklarišete sve promenljive koje se koriste u fragmentima koda. Možete ih uključiti u sam fragment koda (vidljiv na HTML stranicama) ili ih možete dodati u direktivu .. testsetup:: (skrivenu na HTML stranicama). .. testsetup:: mora biti postavljeno ispred .. testcode:::
.. testsetup::
from qgis.core import QgsCoordinateReferenceSystem
.. testcode::
crs = QgsCoordinateReferenceSystem("EPSG:4326")
assert crs.isValid()
Ako isečak koda ne kreira objekte (i stoga ne možete koristiti nešto poput assert object.isValid()), možete testirati kod koristeći metod print(), a zatim dodati očekivane rezultate unutar direktive .. testoutput:: da biste uporedili očekivani izlaz:
.. testcode::
print("QGIS CRS ID:", crs.srsid())
print("PostGIS SRID:", crs.postgisSrid())
.. testoutput::
QGIS CRS ID: 3452
PostGIS SRID: 4326
Podrazumevano, sadržaj .. testoutput:: se prikazuje u HTML izlazu. Da biste ga sakrili iz HTML-a, koristite opciju :hide:.
.. testoutput::
:hide:
QGIS CRS ID: 3452
PostGIS SRID: 4326
Белешка
Ako isečak koda sadrži bilo kakve naredbe za štampanje, MORATE dodati „testoutput“ sa očekivanim izlazima; u suprotnom test neće uspeti.
3.1.2. Grupisanje testova
Za svaki reST dokument, fragmenti koda se testiraju sekvencijalno, što znači da možete koristiti jedan .. testsetup:: za sve sledeće fragmente koda i da će kasniji fragmenti imati pristup promenljivim deklarisanim u ranijim u dokumentu.
Alternativno, možete koristiti grupe da biste razložili primere na istoj stranici u različitim testovima.
Isečak koda dodajete grupama dodavanjem jednog ili više imena grupa (odvojenih zarezima) u odgovarajućoj direktivi:
.. testcode:: crs_crsfromID [, morenames]
crs = QgsCoordinateReferenceSystem("EPSG:4326")
assert crs.isValid()
„doctest“ će odabrati svaki fragment grupe i pokrenuti ih nezavisno.
Белешка
Koristite imena grupa koja imaju smisla sa povezanim sadržajem. Koristite nešto slično kao <chapter>_<subchapter>, na primer: crs_intro, crs_fromwkt. U slučaju kvarova, ovo će pomoći da se identifikuje gde se kvarovi javljaju.
Ako ne deklarišete nijednu grupu, isečak koda će biti dodat grupi pod nazivom „default“. Ako umesto toga koristite „*“ kao naziv grupe, isečak koda će se koristiti u svim grupama za testiranje, što je obično korisno za upotrebu u podešavanju testa:
.. testsetup:: *
from qgis.core import QgsCoordinateReferenceSystem
3.2. Kako testirati isečke koda na lokalnoj mašini
Белешка
Uputstva važe za Linux sistem.
Da biste testirali fragmente Pajton koda, potrebna vam je instalacija QGIS. Za ovo postoji mnogo opcija. Možete:
Koristite instalaciju vašeg sistema QGIS sa Sphinx iz virtuelnog okruženja Python:
make -f venv.mk doctest
Koristite ručno izgrađenu instalaciju QGIS-a. Potrebno vam je:
Napravite prilagođenu ekstenziju
Makefilepreko datotekevenv.mk, na primer datotekuuser.mksa sledećim sadržajem:# Root installation folder QGIS_PREFIX_PATH = /home/user/apps/qgis-master include venv.mk
Ili
# build output folder QGIS_PREFIX_PATH = /home/user/dev/QGIS-build-master/output include venv.mk
Zatim, koristite ga za pokretanje cilja
doctest:make -f user.mk doctest
Pokrenite ciljnu komandu
doctestunutar zvanične QGIS doker slike:make -f docker.mk doctest
Prvo morate instalirati Docker jer on koristi Docker sliku sa QGIS-om u njoj.