94 lines
3.3 KiB
TeX
94 lines
3.3 KiB
TeX
\chapter{Démarrer un nouveau projet}
|
||
|
||
|
||
Django fonctionne sur un
|
||
\href{https://docs.djangoproject.com/en/dev/internals/release-process/}{roulement de trois versions mineures pour une version majeure}, clôturé par une version LTS (\emph{Long Term Support}).
|
||
|
||
\includegraphics{images/django-support-lts.png}
|
||
|
||
La version utilisée sera une bonne indication à prendre en considération pour nos dépendances, puisqu'en visant une version particulière, nous ne devrons pratiquement pas nous soucier (bon, un peu quand même, mais nous le verrons plus tard\ldots\hspace{0pt}) des dépendances à installer, pour peu que l'on reste sous un certain seuil.
|
||
|
||
Dans les étapes ci-dessous, nous épinglerons une version LTS afin de nous assurer une certaine sérénité d'esprit (= dont nous ne occuperons pas pendant les 3 prochaines années).
|
||
|
||
|
||
\section{Tests unitaires}
|
||
|
||
Chaque application est créée par défaut avec un fichier \textbf{tests.py}, qui inclut la classe \texttt{TestCase} depuis le package \texttt{django.test}:
|
||
|
||
|
||
On a deux choix ici:
|
||
|
||
\begin{enumerate}
|
||
\item Utiliser les librairies de test de Django
|
||
\item Utiliser Pytest
|
||
\end{enumerate}
|
||
|
||
\subsection{django.test}
|
||
|
||
\begin{listing}[H]
|
||
\begin{minted}{Python}
|
||
from django.test import TestCase
|
||
class TestModel(TestCase):
|
||
def test_str(self):
|
||
raise NotImplementedError('Not implemented yet')
|
||
\end{minted}
|
||
\end{listing}
|
||
|
||
\subsection{Pytest}
|
||
|
||
\subsection{Couverture de code}
|
||
|
||
La couverture de code est une analyse qui donne un pourcentage lié à la quantité de code couvert par les tests. Il ne s'agit pas de vérifier que le code est bien testé, mais de vérifier quelle partie du code est testée.
|
||
Le paquet coverage se charge d’évaluer le pourcentage de code couvert par les tests.
|
||
Avec pytest, il convient d’utiliser le paquet pytest-cov, suivi de la commande pytest
|
||
--cov=gwift tests/.
|
||
Si vous préférez rester avec le cadre de tests de Django, vous pouvez passer par le paquet django-coverage-plugin.
|
||
Ajoutez-le dans le fichier requirements/base.txt, et lancez une couverture de code grâce à la commande coverage.
|
||
La configuration peut se faire dans un fichier .coveragerc que vous placerez à la racine de votre projet, et qui sera lu lors de l’exécution.
|
||
|
||
|
||
\begin{verbatim}
|
||
# requirements/base.text
|
||
[...]
|
||
django_coverage_plugin
|
||
\end{verbatim}
|
||
|
||
\begin{verbatim}
|
||
# .coveragerc to control coverage.py
|
||
[run]
|
||
branch = True
|
||
omit = ../*migrations*
|
||
plugins =
|
||
django_coverage_plugin
|
||
|
||
[report]
|
||
ignore_errors = True
|
||
|
||
[html]
|
||
directory = coverage_html_report
|
||
\end{verbatim}
|
||
|
||
\begin{verbatim}
|
||
$ coverage run --source "." manage.py test
|
||
|
||
$ coverage report
|
||
|
||
Name Stmts Miss Cover
|
||
---------------------------------------------
|
||
gwift\gwift\__init__.py 0 0 100%
|
||
gwift\gwift\settings.py 17 0 100%
|
||
gwift\gwift\urls.py 5 5 0%
|
||
gwift\gwift\wsgi.py 4 4 0%
|
||
gwift\manage.py 6 0 100%
|
||
gwift\wish\__init__.py 0 0 100%
|
||
gwift\wish\admin.py 1 0 100%
|
||
gwift\wish\models.py 49 16 67%
|
||
gwift\wish\tests.py 1 1 0%
|
||
gwift\wish\views.py 6 6 0%
|
||
---------------------------------------------
|
||
TOTAL 89 32 64%
|
||
----
|
||
$ coverage html
|
||
|
||
\end{verbatim}
|