0

应用程序使用 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

项目/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)
4

1 回答 1

1

db和变量位于您的Check_keyword测试类中,被测代码没有引用。

(而且您的测试代码似乎没有使用它的导入,所以最好摆脱那些)。

您应该将所需的变量传递给被测代码:

沙盒.py

def test_db(db, Check_keyword, keyword):
    if db.contains(Check_keyword.keyword == keyword ):
        print "keyword already in db"
        return True

单元测试.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)
于 2019-02-15T13:46:20.880 回答