Модульный тест Python PostgreSQL не завершает выполнение
У меня есть юнит-тест как
class TestUser(TestCase):
def setUp(self):
print 'setting db up'
db.create_all()
def test_new_user(self):
user = User('test_new_user@none.com', 'welcome')
db.session.add(user)
db.session.commit()
users_in_db = User.query.all()
self.assertEquals(1, len(users_in_db))
self.assertEquals(user.email, users_in_db[0].email)
self.assertEquals(user._password, users_in_db[0]._password)
def tearDown(self):
print 'destroying db'
db.drop_all()
Когда я запускаю это в командной строке, я вижу
python -m unittest discover
secret key: test secret key
db url: postgresql+psycopg2://testuser:testpasswd@localhost/mydb
setting db up
destroying db
Но это никогда не выходит, продолжайте висеть, что я делаю не так? Я новичок в модульном тестировании в Python и не знаю, как проверить, когда мне нужно подключиться к базе данных. пожалуйста, порекомендуйте
1 ответ
Решение
Поработав некоторое время и осмотревшись, у меня началось следующее. Это неэффективно, поскольку отбрасывает всю таблицу и создает их заново для каждого теста, но сейчас, в соответствии с вариантом использования, все в порядке, и оптимизация будет добавлена позже.
Как хорошо сказал Дональд Кнут
"преждевременная оптимизация - первопричина всего зла"
class TestUser(TestCase):
def setUp(self):
db.create_all()
def session_commit(self):
try:
db.session.commit()
except:
db.session.rollback()
finally:
pass
def test_new_user(self):
"""
test that new user is persisted in database
"""
user = User('test_new_user@none.com', 'welcome')
db.session.add(user)
self.session_commit()
users_in_db = db.session.query(User).all()
self.assertEquals(1, len(users_in_db))
self.assertEquals(user.email, users_in_db[0].email)
self.assertEquals(user._password, users_in_db[0]._password)
def tearDown(self):
db.session.close()
for tbl in reversed(db.metadata.sorted_tables):
db.engine.execute(tbl.delete())