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)