4 votes

Tests unitaires en python ?

Je suis nouveau dans le monde de Python et j'ai du mal à comprendre le concept de test unitaire en Python.

Je viens de Java - donc les tests unitaires ont un sens parce que - et bien, là vous avez réellement une unité - une classe. Mais une classe Python n'est pas nécessairement la même qu'une classe Java, et la façon dont j'utilise Python - en tant que langage de script - est plus fonctionnelle qu'OOP - Alors que tester en Python ? Un flux ?

Merci !

9voto

Mizipzor Points 10952

Python dispose d'un module de test unitaire que j'aime bien. Vous pouvez également lire section de test unitaire de Dive Into Python.

Voici un exemple de base tiré de la documentation (en lien) :

import random
import unittest

class TestSequenceFunctions(unittest.TestCase):

    def setUp(self):
        self.seq = range(10)

    def test_shuffle(self):
        # make sure the shuffled sequence does not lose any elements
        random.shuffle(self.seq)
        self.seq.sort()
        self.assertEqual(self.seq, range(10))

        # should raise an exception for an immutable sequence
        self.assertRaises(TypeError, random.shuffle, (1,2,3))

    def test_choice(self):
        element = random.choice(self.seq)
        self.assertTrue(element in self.seq)

    def test_sample(self):
        with self.assertRaises(ValueError):
            random.sample(self.seq, 20)
        for element in random.sample(self.seq, 5):
            self.assertTrue(element in self.seq)

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

5voto

luc Points 13564

Si vous faites de la programmation fonctionnelle, l'unité est la fonction et je vous recommande de tester vos fonctions à l'unité.

5voto

Carson Myers Points 11135

Pour des tests simples et rapides, vous pouvez consulter les sites suivants doctrines .

Pour écrire les tests, vous placez des choses qui ressemblent à des sessions d'interpréteur interactif dans une docstring :

def my_function(n):
    """Return n + 5

    >>> my_function(500)
    505"""
    return n + 5

pour exécuter le test, vous importez doctest et exécuter doctest.testmod() qui va exécuter tous les doctests du module. Vous pouvez également utiliser doctest.testfile("...") pour exécuter tous les tests dans un autre fichier.

Si vous vérifiez le documentation pour les doctests vous trouverez des moyens de faire en sorte qu'un test attende des exceptions, des listes, etc - tout ce que l'interpréteur produirait, plus quelques caractères de remplacement pour la brièveté.

C'est un moyen rapide d'écrire des tests dans des modules Python, il n'y a pas beaucoup de code passe-partout, et il est plus facile de les maintenir à jour (le test est juste là dans la fonction !). Mais je les trouve aussi un peu moches.

3voto

Dror Helper Points 15499

J'ai écrit un article sur tests unitaires dans IronPython - cela fonctionne de la même manière que dans les autres versions de Python.

Jetez également un coup d'œil à ces projets :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X