2017-04-14 4 views
0

Je tente d'exécuter des tests en python. Im en utilisant un cadre Unittest. Le test "test_processJson" utilise un test Json, dictTestString, puis vérifie s'il contient un ou plusieurs éléments. Ceci est mon script « testing.py »l'objet n'a aucun attribut 'loads' dans la classe UnitTest

import json 
import starter#The code Im trying to test 
import unittest 

class MyTests(unittest.TestCase): 

    def test_processJson(json): 
     dictTestString = '{"city":"Barcelona"}' 
     jTest = json.loads(dictTestString) 
     dictProcess = starter.processJson(dictTest) 

     self.assertEquals(dictProcess["city"], "Barcelona") 

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

Le problème vient quand je lance le test que je reçois cette erreur:

Traceback (most recent call last):

File "testing.py", line 16, in test_processJson

jTest = json.loads(dictTestString)

AttributeError: 'MyTests' object has no attribute 'loads'

Je suis nouveau à python, donc j'ai cherché une réponse, mais l'une des erreurs que j'ai vu Im ne pas faire.

Toute aide sera appréciée.

Merci.

Répondre

1

L'argument de votre fonction est nommé json, qui est le module global json. En fait, puisqu'il s'agit du premier argument d'une méthode, il est lié à l'instance MyTest actuelle, et puisque les méthodes de test unittest n'attendent que l'instance actuelle comme argument ET que vous n'avez pas besoin d'un argument json ici, il vous suffit de renommez-le en self (qui est la convention pour le premier argument des méthodes d'instance) et votre problème sera résolu.

NB: Il y a quelques autres fautes de frappe/problèmes avec votre code mais je vous laisse le soin de les trouver et de les résoudre - cela fait partie du plaisir n'est-ce pas?

+0

Merci, je ne peux pas croire que je n'ai pas vu ça! – subharb