Python unittest setUP временная БД - NameError: глобальное имя 'db' не определено

Используя tinyDB, приложение сохраняет данные в файл json. Мне нужно выполнить тестирование, если определенные данные уже содержатся в файле базы данных.

Я создаю альтернативную настройку базы данных в методе setUP в переменной db. Я получаю ошибку ниже. Почему переменная 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

Код для тестирования в проекте / 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

Unittest в проекте /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 ответ

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)
Другие вопросы по тегам