2014-09-10 3 views
1

Здесь я сделал класс питона для подключения Монго и получить данные из Монго базы данных и процесса его я сделал Тестовый блок для этого я получил следующим сообщение об ошибкеNameError: глобальное имя «клиент» не определен

NameError: глобальное имя 'клиент' не определен

класс питона:

from pymongo.errors import ConnectionFailure, AutoReconnect 
import pymongo 
from pymongo import MongoClient 

class ConnectionError(Exception): 
    pass 



class ChkMongo: 

item_list=[] 
dict1={} 

def makeMongocon(self): 

    global client 
    try : 
     client = MongoClient("localhost", 27017) 

    except AutoReconnect, e: 
     raise ConnectionFailure(str(e)) 

def findRecords(self): 
    self.db = client.serv 
    for item in self.db.serv.find(): 
     self.item_list.insert(0,item) 
    return self.item_list 





if __name__ == '__main__': 
    c=ChkMongo() 
    c.makeMongocon() 
    print(c.findRecords()) 

мой блок тест

from pymongo.errors import ConnectionFailure 
import unittest; 
from app.ChkMongo import * 

class TestChkMongo(unittest.TestCase): 

def setUp(self): 
    self.c=ChkMongo() 

def test_makeMongocon(self): 
    self.assertRaises(ConnectionFailure,self.c.makeMongocon) 
def test_findRecords(self): 
    print(self.c.findRecords()) 
    self.assertDictContainsSubset({'name':'matthew'},self.c.findRecords()) 
def test_calculate_charge_with_tax(self): 
    self.assertAlmostEqual(290,self.c.calculate_charge_with_tax('matthew')) 


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

я получил следующее сообщение об ошибке при запуске тестовых случаев, но запустить скрипт питона, который будет работать нормально

Ошибка:

Traceback (most recent call last): 
    File "/test/test_chkMongo.py", line 16, in test_findRecords 
    print(self.c.findRecords()) 
    File "n/app/ChkMongo.py", line 29, in findRecords 
    self.db = client.serventer code here 
NameError: global name 'client' is not defined 

ответ

0

Я понятия не имею, почему вы используете глобальную переменную здесь client. Это должна быть переменная экземпляра класса ChkMongo.

class ChkMongo: 
    def __init__(self): 
    self.item_list = [] 
    self.dict1 = {} 

    def makeMongocon(self): 
    try: 
     self.client = MongoClient("localhost", 27017) 
    except AutoReconnect, e: 
     raise ConnectionFailure(str(e)) 

    def findRecords(self): 
    self.db = self.client.serv 
    for item in self.db.serv.find(): 
     self.item_list.insert(0,item) 
    return self.item_list 

Обратите внимание, что item_list и dict1 также должны быть свойства экземпляра, а не класс них.

+0

, когда я изменить в качестве переменной экземпляра я получил следующее сообщение об ошибке, когда я запускаю тест блока я получил следующую ошибку: self.db = self.client.serv AttributeError: экземпляр ChkMongo не имеет атрибута «клиент» – kayu

+0

Ну, ваш метод 'test_findRecords' не вызывает метод makeMongocon для настройки соединения. Как вы ожидаете, что это сработает? –

Смежные вопросы