unittest - write test python




ordre changeant des tests unitaires en Python (5)

Comme indiqué ci-dessus, les tests dans les cas de test doivent normalement être testés dans n'importe quel ordre (c.-à-d. Aléatoire).

Cependant, si vous souhaitez commander les tests dans le scénario de test, il semble que ce ne soit pas trivial. Les tests (noms de méthode) sont extraits des dir(MyTest) de test à l'aide de dir(MyTest) , qui renvoie une liste triée de membres. Vous pouvez utiliser un hack intelligent (?) Pour ordonner les méthodes par leurs numéros de ligne. Cela fonctionnera pour un cas de test:

if __name__ == "__main__":
    loader = unittest.TestLoader()
    ln = lambda f: getattr(MyTestCase, f).im_func.func_code.co_firstlineno
    lncmp = lambda a, b: cmp(ln(a), ln(b))
    loader.sortTestMethodsUsing = lncmp
    unittest.main(testLoader=loader, verbosity=2)

Comment puis-je le faire pour que les tests unitaires en Python (en utilisant unittest ) soient exécutés dans l'ordre dans lequel ils sont spécifiés dans le fichier?


Il y a aussi des testeurs qui le font tout seuls - je pense que py.test le fait.


Une dénomination intelligente

class Test01_Run_Me_First( unittest.TestCase ):
    def test010_do_this( self ):
        assertTrue( True )
    def test020_do_that( self ):
        etc.

Est-ce un moyen de forcer un ordre spécifique.



méthode de piratage (exécutez ce fichier dans pycharm ou un autre testeur d'unité)

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import unittest


def make_suite():
    class Test(unittest.TestCase):
        def test_32(self):
            print "32"
        def test_23(self):
            print "23"

    suite = unittest.TestSuite()
    suite.addTest(Test('test_32'))
    suite.addTest(Test('test_23'))
    return suite

suite = make_suite()

class T(unittest.TestCase):
    counter = 0
    def __call__(self, *args, **kwargs):
        res = suite._tests[T.counter](*args, **kwargs)
        T.counter += 1
        return res

for t in suite._tests:
    name = "{}${}".format(t._testMethodName, t.__class__.__name__)
    setattr(T, name, t)




unit-testing