J'ai expliqué comment utiliser unittest dans Exécuter unittest en Python (pour les débutants). En l'utilisant, je voulais tester plusieurs tests à la fois et les organiser. En d'autres termes, comment utiliser TestSuite. Documentation officielle et "[[Python] Deux façons d'implémenter une suite de tests avec le module unittest](http: //www.yoheim. net / blog.php? q = 20160903) ”a été utilisé comme référence.
.
├─sample_a.py
└─tests
├─__init__.py
├─test_samplea.py
├─test_sampleb.py
├─samplec.py
└─sample_suite.py
sample_a.py
class SampleA():
def hello(self):
print('Hello, I am sample of a!')
test_samplea.py
import unittest
from sample_a import SampleA
class TestSampleA(unittest.TestCase):
def test_a1(self):
print('Test sample A1')
a = SampleA()
a.hello()
def test_a2(self):
print('Test sample A2')
def a3(self):
print('Test sample A3')
test_sampleb.py
import unittest
class TestSampleB(unittest.TestCase):
def test_b1(self):
print('Test sample B1')
def test_b2(self):
print('Test sample B2')
def b3(self):
print('Test sample B3')
samplec.py
import unittest
class SampleC(unittest.TestCase):
def test_c1(self):
print('Test sample C1')
def test_c2(self):
print('Test sample C2')
def c3(self):
print('Test sample C3')
sample_suite.py
import unittest
from . import test_samplea
from . import test_sampleb
from . import samplec
def suite():
suite = unittest.TestSuite()
suite.addTest(test_samplea.TestSampleA('test_a1'))
suite.addTest(test_samplea.TestSampleA('a3'))
suite.addTest(unittest.makeSuite(test_sampleb.TestSampleB))
suite.addTest(samplec.SampleC('test_c1'))
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
test_suite = suite()
runner.run(test_suite)
python -m unittest tests.test_samplea Le résultat de l'exécution est le suivant.
Test sample A1
Hello, I am sample of a!
.Test sample A2
.
----------------------------------------------------------------------
Ran 2 tests in 0.003s
OK
À partir de la sortie, vous pouvez voir que les méthodes de test test_a1 et test_a2 sont en cours d'exécution. Aucun test n'a été effectué sur la méthode a3.
python -m unittest Le résultat de l'exécution est le suivant.
Test sample A1
Hello, I am sample of a!
.Test sample A2
.Test sample B1
.Test sample B2
.
----------------------------------------------------------------------
Ran 4 tests in 0.006s
OK
À partir des résultats des tests, vous pouvez voir que les tests pour test_samplea.py et test_sampleb.py sont en cours d'exécution. Le test de samplec.py n'a pas été exécuté. Dans le fichier commençant par test, les tests des méthodes commençant par test sont exécutés ensemble.
__init __. Py '' pour reconnaître les tests dans le répertoire tests. Dans Python3, même si
`` __init __. Py``` n'existe pas, il sera reconnu comme un package, vous ne pouvez donc pas le créer. Veuillez noter que vous en aurez besoin lors de l'utilisation de la découverte de test.python -m tests.sample_suite
Test sample A1
Hello, I am sample of a!
.Test sample A3
.Test sample B1
.Test sample B2
.Test sample C1
.
----------------------------------------------------------------------
Ran 5 tests in 0.006s
OK
Le test ajouté par addTest est en cours d'exécution. Les méthodes de test (a3) qui ne commencent pas par des fichiers de test et de test (samplec.py) qui ne commencent pas par test sont également exécutées. Comment ajouter un test consiste à ajouter chaque méthode suite.addTest(test_samplea.TestSampleA('test_a1')) Ou Ajout par classe suite.addTest(unittest.makeSuite(test_sampleb.TestSampleB)) il y a.
La méthode de découverte de test est très pratique car vous pouvez exécuter le test sans rien définir. Cependant, au fur et à mesure que le nombre de tests augmente et que des tests qui prennent beaucoup de temps à traiter sont ajoutés, je souhaite exclure les tests, j'ai donc étudié comment exécuter uniquement les tests que j'ai décidés. Je n'ai pas pu faire d'essais et d'erreurs et j'ai pensé qu'il pourrait être implémenté un peu plus simple et exécuté avec le test unitaire python -m. Pas bon car l'interface à exécuter est incohérente. .. .. Veuillez me faire savoir s'il existe un moyen plus simple de le mettre en œuvre.
Recommended Posts