4

Depuis la version 3.4, Python supports a simple subtest syntax when writing unittests. Un exemple simple pourrait ressembler à ceci:Nombre de sous-tests dans Python unitteststs séparément

import unittest 

class NumbersTest(unittest.TestCase): 

    def test_successful(self): 
     """A test with subtests that will all succeed.""" 
     for i in range(0, 6): 
      with self.subTest(i=i): 
       self.assertEqual(i, i) 

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

Lors de l'exécution des tests, la sortie sera

python3 test_foo.py --verbose 
test_successful (__main__.NumbersTest) 
A test with subtests that will all succeed. ... ok 

---------------------------------------------------------------------- 
Ran 1 test in 0.000s 

OK 

Cependant, dans mon vrai cas d'utilisation du monde, les sous-tests dépendra d'un itérables plus complexe et vérifiez quelque chose qui est très différent pour chaque sous-test. Par conséquent, je préférerais que chaque sous-test soit compté et listé comme un cas de test séparé dans la sortie (Ran 6 tests in ... dans cet exemple) pour obtenir une image complète.

Est-ce que c'est en quelque sorte possible avec le module unittest en Python? The nose test generator feature produirait chaque test séparément mais je voudrais rester compatible avec la bibliothèque standard si possible.

Répondre

0

Vous pouvez sous-classe unittest.TestResult:

class NumbersTestResult(unittest.TestResult): 
    def addSubTest(self, test, subtest, outcome): 
     # handle failures calling base class 
     super(NumbersTestResult, self).addSubTest(test, subtest, outcome) 
     # add to total number of tests run 
     self.testsRun += 1 

Puis, en NumbersTest remplacer la fonction run:

def run(self, test_result=None): 
    return super(NumbersTest, self).run(NumbersTestResult()) 

Désolé je ne peux pas tester cela dans un environnement entièrement travail en ce moment, mais cela devrait faire l'affaire .