Важно

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:

    1. Napravite prilagođenu ekstenziju Makefile preko datoteke venv.mk, na primer datoteku user.mk sa 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
      
    2. Zatim, koristite ga za pokretanje cilja doctest:

      make -f user.mk doctest
      
  • Pokrenite ciljnu komandu doctest unutar zvanične QGIS doker slike:

    make -f docker.mk doctest
    

    Prvo morate instalirati Docker jer on koristi Docker sliku sa QGIS-om u njoj.