Python unittest setUP临时数据库-NameError:全局名称“ db”未定义

时间:2019-02-15 09:06:21

标签: python unit-testing tinydb

使用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)

1 个答案:

答案 0 :(得分:1)

dbCheck_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)