[PYTHON] Dekorateur für Unit-Test mit Zufallszahlen

einpacken

Ein Dekorateur, der "Beeilen Sie sich nicht und versuchen Sie es erneut" anzeigt, wenn ein Komponententest, der mit einer bestimmten Wahrscheinlichkeit fehlschlägt, weil eine Zufallszahl verwendet wird, fehlschlägt.

Quelle

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) #Scheitern Sie ungefähr 2 Mal in 10 Mal




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

Definieren Sie einen Dekorator namens statistisch und setzen Sie @statistical, bevor Sie mit Zufallszahlen testen.

Ausführungsergebnis

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)
...Folgendes wird weggelassen...

Recommended Posts

Dekorateur für Unit-Test mit Zufallszahlen
Ich habe einen Unit-Test für verschiedene Sprachen geschrieben
Geben Sie die Pytest-Clean-Parameter für den Test der Kolbeneinheit an
Python-Unit-Test
So führen Sie einen Komponententest durch Teil 2 Klassendesign zum Testen