[PYTHON] Décorateur pour test unitaire utilisant des nombres aléatoires

emballer

Un décorateur qui affiche "Ne vous précipitez pas et réessayez" lorsqu'un test unitaire qui échoue avec une certaine probabilité parce qu'un nombre aléatoire est utilisé échoue.

La source

randtest.py


import unittest
import numpy as np




def statistical(test):
    def do_test(self):
        try:
            test(self)
        except AssertionError as e:
            e.args += ("NOTE: this is a statistical test, which may fail.", )
            raise 
    return do_test




class TestHoge(unittest.TestCase):
    @statistical
    def test_normal(self):
        val = np.random.uniform(0, 1, 1)
        self.assertTrue(val[0] < 0.8) #Échouer environ 2 fois en 10 fois




if __name__ == "__main__":
    unittest.main()

Définissez un décorateur appelé statistique et mettez @statistical avant de tester avec des nombres aléatoires.

Résultat d'exécution

python


bash-3.2$ for i in $(seq 10); do ./randtest.py ; done
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
F
======================================================================
FAIL: test_normal (__main__.TestHoge)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./randtest.py", line 14, in do_test
    test(self)
  File "./randtest.py", line 24, in test_normal
    self.assertTrue(val[0] < 0.8)
AssertionError: ('False is not true', 'NOTE: this is a statistical test, which may fail.')

----------------------------------------------------------------------
Ran 1 test in 0.006s

FAILED (failures=1)
...Ce qui suit est omis...

Recommended Posts

Décorateur pour test unitaire utilisant des nombres aléatoires
J'ai écrit un test unitaire pour différentes langues
Donner les paramètres de nettoyage pytest pour le test unitaire du flacon
Test unitaire Python
Comment faire un test unitaire Part.2 Conception de classe pour les tests