У меня есть файл yaml, содержащий информацию о конфигурации базы данных, и файл python, чтобы проверить подключение к базе данных через этот файл конфигурации. Затем я написал несколько тестовых примеров в файле python. Есть функция
def test_db_type_postgres(self):
database = DB({'database': 'postgres'});
self.assertEqual(database.get_db_type(), 'postgres')
Я надеюсь, что вышеупомянутая функция состоит в том, что если база данных Postgres, то она пройдет, но не удалась. Я проверил журнал испытаний. Кажется, на это влияет метод
#checking db option
dbopt = self.__get_dbopt()
if dbopt is None:
raise InvalidConfigError(
'E01002', 'Invalid database options.')
else:
self.dbopt = dbopt
Где я не прав? Пожалуйста, покажите мне. Любая помощь приветствуется.
Мой python файл (включая тестовые примеры):
import yaml
import unittest
class InvalidConfigError(Exception):
pass
class DB():
def __init__(self, dbconf):
self._dbconf = dict(dbconf)
# checking for database type
dbtype = self.get_db_type()
if dbtype != 'sqlite' and dbtype != 'postgres':
raise InvalidConfigError()
else:
self.dbtype = dbtype
#checking db option
dbopt = self.__get_dbopt()
if dbopt is None:
raise InvalidConfigError(
'E01002', 'Invalid database options.')
else:
self.dbopt = dbopt
def get_db_type(self):
return self._dbconf.get('database')
def __get_dbopt(self):
return self._dbconf.get('dbopt')
class TestDBtype(unittest.TestCase):
#setUpClass gets calls only once where as setUp gets called before every test
@classmethod
def setUpClass(cls):
cls.init_db()
@classmethod
def init_db(cls):
with open('DatabaseConfig.yml') as f:
data = yaml.full_load(f)
for item, doc in data.items():
print(item, ":", doc)
cls.database = DB(data)
def test_missing_db(self):
database = DB({'database': None});
self.assertRaises(InvalidConfigError)
def test_db_type_postgres(self):
database = DB({'database': 'postgres'});
self.assertEqual(database.get_db_type(), 'postgres')
def test_db_type_invalid(self):
database = DB({'database': 'mysql'});
self.assertRaises(InvalidConfigError)
class TestOpt(unittest.TestCase):
#setUpClass gets calls only once where as setUp gets called before every test
@classmethod
def setUpClass(cls):
cls.init_db()
@classmethod
def init_db(cls):
with open('DatabaseConfig.yml') as f:
data = yaml.full_load(f)
for item, doc in data.items():
print(item, ":", doc)
cls.database = DB(data)
def test_db_opt(self):
database = DB({'dbopt': None});
self.assertRaises(InvalidConfigError)
if __name__ == '__main__':
unittest.main()
Выход журнала теста:
database : postgres
dbopt : {'host': 'localhost', 'port': 6311, 'dbname': 'spam_eggs', 'user': 'hamburger', 'password': 'example_password', 'client_encoding': 'utf-8', 'connect_timeout': 60, 'sslmode': 'none'}
query : select * from manufacturing_product
test_db_type_invalid (test_db_type.TestDBtype) ... ERROR
NoneType: None
test_db_type_postgres (test_db_type.TestDBtype) ... ERROR
NoneType: None
test_missing_db (test_db_type.TestDBtype) ... ERROR
NoneType: None
======================================================================
ERROR: test_db_type_invalid (test_db_type.TestDBtype)
----------------------------------------------------------------------
Traceback (most recent call last):
File "d:\Python\TestDataSource\test_db_type.py", line 60, in test_db_type_invalid
database = DB({'database': 'mysql'});
File "d:\Python\TestDataSource\test_db_type.py", line 14, in __init__
raise InvalidConfigError()
test_db_type.InvalidConfigError
======================================================================
ERROR: test_db_type_postgres (test_db_type.TestDBtype)
----------------------------------------------------------------------
Traceback (most recent call last):
File "d:\Python\TestDataSource\test_db_type.py", line 56, in test_db_type_postgres
database = DB({'database': 'postgres'});
File "d:\Python\TestDataSource\test_db_type.py", line 22, in __init__
'E01002', 'Invalid database options.')
test_db_type.InvalidConfigError: ('E01002', 'Invalid database options.')
======================================================================
ERROR: test_missing_db (test_db_type.TestDBtype)
----------------------------------------------------------------------
Traceback (most recent call last):
File "d:\Python\TestDataSource\test_db_type.py", line 52, in test_missing_db
database = DB({'database': None});
File "d:\Python\TestDataSource\test_db_type.py", line 14, in __init__
raise InvalidConfigError()
test_db_type.InvalidConfigError
----------------------------------------------------------------------
Ran 3 tests in 0.003s
FAILED (errors=3)