这里我做了连接mongo的python类并从mongo数据库中获取数据并处理它我为此做了单元测试用例我得到了以下错误
NameError:未定义全局名称“client”
python class:
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()
我在运行测试用例时遇到以下错误,但运行了可以正常工作的python脚本
错误:
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 :(得分:1)
对我来说,这是在使用Python 3.6.x 和Python 2.x 运行测试时发生的。 某些异常名称在Python 2.x 中不可用。
例如使用ConnectionError
:
在Python 2.x 中,使用python
解释器,我得到了NameError
,因为它无法识别。
>>> raise ConnectionError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ConnectionError' is not defined
在Python 3.6.x 中,使用python3
解释器,我得到了正确的ConnectionError
>>> raise ConnectionError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ConnectionError
在使用多个版本的Python或不同的venv时可能会很棘手。希望对调试有所帮助。
答案 1 :(得分: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
也需要是实例属性,而不是类属性。