web-dev-qa-db-fra.com

Python unittest - Ran 0 tests en 0.000s

Je veux donc faire ce code Kata pour la pratique. Je veux implémenter le kata avec tdd dans des fichiers séparés:

L'algorithme:

# stringcalculator.py  
def Add(string):
   return 1

et les tests:

# stringcalculator.spec.py 
from stringcalculator import Add
import unittest

class TestStringCalculator(unittest.TestCase):
    def add_returns_zero_for_emptyString(self):
        self.assertEqual(Add(' '), 0)

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

Lors de l'exécution du fichier de test, j'obtiens:

Ran 0 tests in 0.000s

OK

Il devrait cependant renvoyer un test ayant échoué. Qu'est-ce que je manque ici?

22
MattSom

Comme indiqué dans le python unittest doc :

La sous-classe TestCase la plus simple implémentera simplement une méthode de test (c'est-à-dire une méthode dont le nom commence par test)

Vous devrez donc changer le nom de votre méthode en quelque chose comme ceci:

def test_add_returns_zero_for_emptyString(self):
    self.assertEqual(Add(' '), 0)
27
abccd

Sidenote: De plus, le nom du fichier dans lequel se trouvent tous les tests doit commencer par 'test_'

15
Shashank

J'avais un problème similaire. Ma racine était que j'avais placé le bloc d'exécution pour unittest.main dans la classe Test. Cela a gardé la messagerie des tests RAN 0. Le déplacer en dehors de la classe a fonctionné.

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

Mêmes symptômes, mais problème différent. Assurez-vous de ne pas mélanger les onglets et les espaces pour l'indentation. Le problème peut se produire lorsque vous copiez le code à partir d'une ressource en ligne et le mettez à jour selon vos besoins. Étant donné que les tabulations et les espaces se ressemblent beaucoup dans la plupart des éditeurs, la fonction de test peut tout simplement ne pas être définie correctement.

1
mikryz