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.
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.
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...