modèle de test unitaire python

Contexte

python inclut unittest dans le module standard, mais je ne savais pas comment l'utiliser tout de suite, donc je garderai le modèle en tant que mémorandum afin de pouvoir le copier et le coller dans d'autres projets.

*Remarques

Depuis python2.7, unittest peut utiliser setUpClass et tearDownClass, qui sont exécutés lorsque la classe de test est initialisée. Pour python2.6 et inférieur, vous pouvez utiliser ces méthodes en important un module appelé unittest2.

Modèle de code

point

# -*- coding: utf-8 -*-
import os, sys, unittest

class Sample():
	"""Classe à tester"""
	#Méthode à tester
	def return_hoge(self):
		return 'hoge'

	#Méthode à tester
	def return_poyo(self):
		return 'poyo'

class SampleTest(unittest.TestCase):
	"""Une classe de test qui teste une classe"""
	CLS_VAL = 'none'

	#Appelé une seule fois lorsque la classe de test est initialisée(python2.7 ou plus)
	@classmethod
	def setUpClass(cls):
		if sys.flags.debug: print('> setUpClass method is called.')
		#Exécuter des méthodes de traitement lourdes pour se préparer aux tests
		cls.CLS_VAL = '> setUpClass : initialized!'
		if sys.flags.debug: print(cls.CLS_VAL)

	#Appelé une seule fois lorsque la classe de test est libérée(python2.7 ou plus)
	@classmethod
	def tearDownClass(cls):
		if sys.flags.debug: print('> tearDownClass method is called.')
		#Libérez l'objet préparé par setUpClass
		cls.CLS_VAL = '> tearDownClass : released!'
		if sys.flags.debug: print(cls.CLS_VAL)

	#Appelé chaque fois que vous exécutez une méthode de test
	def setUp(self):
		if sys.flags.debug: print(os.linesep + '> setUp method is called.')
		#Effectuer un processus léger pour préparer le test
		self.smpl = Sample()

	#Appelé après chaque exécution de méthode de test
	def tearDown(self):
		if sys.flags.debug: print(os.linesep + '> tearDown method is called.')
		#Libérez l'objet préparé par setUp

	def test_hoge(self):
		expected = 'hoge'
		actual = self.smpl.return_hoge()
		self.assertEqual(expected, actual)

	def test_poyo(self):
		expected = 'poyo'
		actual = self.smpl.return_hoge() #Erreur commune
		self.assertEqual(expected, actual)

if __name__ == '__main__':
	#Exécuter unittest
	unittest.main()

De gitHub

Résultat d'exécution

Mettez l'indicateur -d sur lors de l'exécution d'un script python pour passer en mode débogage. (sys.flags.debug sera True.)

python -d /Users/you/Desktop/sample.py

> setUpClass method is called.
> setUpClass : heavy method

> setUp method is called.

> tearDown method is called.
.
> setUp method is called.
F
> tearDown method is called.
> tearDownClass method is called.
> tearDownClass : released

======================================================================
FAIL: test_poyo (__main__.SampleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/you/Desktop/sample.py", line 54, in test_poyo
    self.assertEqual(expected, actual)
AssertionError: 'poyo' != 'hoge'

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

Sortie lorsque vous n'êtes pas en mode débogage

 python /Users/you/Desktop/sample.py
.F
======================================================================
FAIL: test_poyo (__main__.SampleTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/you/Desktop/sample.py", line 54, in test_poyo
    self.assertEqual(expected, actual)
AssertionError: 'poyo' != 'hoge'

----------------------------------------------------------------------
Ran 2 tests in 0.000s

FAILED (failures=1)

Appendix

Je ne pense pas qu'il soit beaucoup utilisé dans les petits scripts, mais si vous en avez besoin, il existe également une méthode d'initialisation pour chaque module telle que setUpModule.

Recommended Posts

modèle de test unitaire python
Modèle Python pour Codeforces-test manuel-
Sortie du journal de test unitaire avec python
Test d'intégrité Python
modèle argparse python
Test unitaire Python
[Python] Modèle Tkinter
Jugement des nombres premiers par Python
Jugement des nombres premiers avec Python
[Python] Ce que j'ai fait pour faire un test unitaire
Test numpy Python Basic 8
Modèle Pro compétitif (Python)
Mémo du package de test Python
Jugement des nombres premiers avec python
bibliothèque de tests unitaires python introduction à l'option Nose-19 types-
Modèle d'analyse de données Python
Moteur de template Jinja2 2 Python
test de coopération de balises python
Effectuer un test unitaire de Databricks Notebook
Écrire du code dans UnitTest une application Web Python
Algorithme en Python (jugement premier)
Test unitaire du flacon avec pytest
Module de débogage et de test Python
[Python] Modèle Pro compétitif [Chez Coder]
Définir le test python dans jenkins
Python Design Pattern - Méthode de modèle
Python
AtCoder: Python: Papa, l'exemple de test.
tester
[Python] Exemple de test avec unittest2, simulé
Ecrire le code de test du sélénium en python
Modèle de prétraitement pour l'analyse des données (Python)
Création d'un outil de test AtCoder pour Python
Test statistique (test multiple) en Python: scikit_posthocs
Modèle AtCoder ABC 179 Python (A ~ E)
[Pytest] [mock] Les débutants en développement Web ont résumé le test unitaire et simulé en python.
Ecrire un test unitaire de langage C en Python
Blender 2.9, test de couleur de la lumière d'arrière-plan Python
modèle
Tester les programmes non fonctionnalisés Python avec GitLab CI
Un chercheur d'une société pharmaceutique a résumé le test unitaire Python
Test WebUI avec Python2.6 + Selenium 2.44.0 - paramètre de profil
Ecrire le test dans la docstring python
Générer des données de test japonais avec Python Faker
Modèle pour l'écriture de scripts batch en python
Comment faire un test de sac avec python
Intégration avec setuptools / python setup.py test / pytest-runner
Le modèle de projet Python auquel je pense.
Tutoriel Django (Créer une application de blog) ④ --Test d'unité
python setup.py tester le code en utilisant le multiprocessus
Exécutez le serveur python wsgi sur l'unité NGINX