使用tinyDB,应用程序将数据持久存储到json文件中。我需要对数据库文件中是否已经包含某些数据进行单元测试。
我正在变量db中的setUP方法中创建备用数据库设置。我得到下面的错误。为什么db变量对于正在测试的函数中的名称空间不可用?
运行单元测试时,我得到:
ERROR: test_contains (__main__.TestDB)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test.py", line 65, in setUp
print type(db)
NameError: global name 'db' is not defined
要在project / app / sandbox.py中进行测试的代码
from tinydb import TinyDB, Query
db = TinyDB('db.json')
Check_keyword = Query()
def test_db(keyword):
if db.contains(Check_keyword.keyword == keyword ):
print "keyword already in db"
return True
project / test.py中的单元测试
from tinydb import TinyDB, Query
from app.sandbox import test_db
class TestDB(unittest.TestCase):
def setUp(self):
self.db = TinyDB('test_db.json')
self.Check_keyword = Query()
def test_contains(self):
data = "doctor salarybljkhl"
result = test_db(data)
self.assertEqual(result, True)
答案 0 :(得分:1)
db
和Check_keyword
变量位于您的测试类中,被测代码没有引用。
(同样,被测代码似乎不使用其导入,因此最好将其删除)。
您应将所需的变量传递给被测代码:
sandbox.py
def test_db(db, Check_keyword, keyword):
if db.contains(Check_keyword.keyword == keyword ):
print "keyword already in db"
return True
unittest.py
from tinydb import TinyDB, Query
from app.sandbox import test_db
class TestDB(unittest.TestCase):
def setUp(self):
self.db = TinyDB('test_db.json')
self.Check_keyword = Query()
def test_contains(self):
data = "doctor salarybljkhl"
result = test_db(self.db, self.Check_keyword, data)
self.assertEqual(result, True)