2011-06-22 6 views
1

J'ai écrit un test qui montre l'erreurobjet str n'est pas appelable pour unittest

from unittest import * 
class MyTest(unittest.TestCase): 
    def test_add(self): 
     self.assertEquals(1,(2-1),"Sample Subraction Test") 


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

Sortie: objet Str n'est pas appelable

Au lieu de « de * l'importation unittest » Je étant donné « importation unittest »

il a travaillé

mais je ne pouvais pas pointer selon Quelle est la raison pour cela?

+0

Pour moi, votre script soulève l'erreur 'NameError: name 'unittest' n'est pas défini', comme prévu. Si vous importez les symboles de 'unittest' dans le module principal, il n'y a pas de nom' unittest'. –

+0

Comme @Sven l'a fait remarquer, votre script donne un NameError sur la ligne 'class MyTest (unittest.TestCase)' car le 'from unittest import *' n'aboutit pas à ce que le nom 'unittest' soit lié à quoi que ce soit. Le changer pour juste 'importer unittest' résout ceci. Je ne comprends pas ce que vous entendez par "mais je ne pouvais toujours pas le préciser" - veuillez reformuler. – martineau

+0

@sven et @marti NameError est mon erreur; Il y avait une erreur à la place que (unittest.TestCase) si vous donnez seulement "TestCase". Vous obtiendrez "str object is callble"; c'est mon endroit douteux – Nava

Répondre

3

from ... import * est pratique dangereuse et ne doit être utilisé lorsque le module/package a été conçu et annoncé de cette façon, et vous avez un bon raison de le faire.

Il s'avère que le mode unittest n'a pas été conçu de cette manière et lorsque cette méthode est utilisée, deux autres 'cas de test' sont trouvés, mais comme ils ne sont pas vraiment des cas de test, ils créent des problèmes.

La bonne façon de faire ce que vous voulez est:

import unittest 
class MyTest(unittest.TestCase): 
    def test_subtraction(self): 
     self.assertEqual(1, (2-1), "Sample Subraction Test") 

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

Dans la recherche de cette question, je découvert que la boîte variable de __all__ et doit être utilisé pour définir l'API publique - sa présence ne signifie pas que from ... import * est pris en charge.

-1

Je l'ai eu comme ça. Remplacer méthode runTest(), créer une instance, exécutez votre test_add()

from unittest import TestCase 

class MyTest(TestCase): 
    def runTest(self): 
     pass 

    def test_add(self): 
     self.assertEquals(1,(2-2),"Sample Subraction Test") 


if __name__ == '__main__': 
    test = MyTest() 
    test.test_add() 
+0

Même vous obtiendrez "TypeError: objet 'str' n'est pas appelable " – Nava

+0

J'ai "AssertionError: Sample Subraction Test" (PythonWin 2.6.6) –

+0

il y a le problème avec "de l'importation unittest *" Comment sera l'erreur d'assertion? Je pense que cela n'a aucune erreur d'assertion – Nava

Questions connexes