Нос
тестовият инструмент поддържа setup_package()
и teardown_package()
методи. Ето извадка от документите:
В моето приложение имам setup_package()
което изглежда приблизително така:
def _create_database():
template_engine = sa.create_engine("postgres://[email protected]/postgres", echo=False)
conn = template_engine.connect()
conn = conn.execution_options(autocommit=False)
conn.execute("ROLLBACK")
try:
conn.execute("DROP DATABASE %s" % DB_NAME)
except sa.exc.ProgrammingError as e:
# Could not drop the database, probably does not exist
conn.execute("ROLLBACK")
except sa.exc.OperationalError as e:
# Could not drop database because it's being accessed by other users (psql prompt open?)
conn.execute("ROLLBACK")
conn.execute("CREATE DATABASE %s" % DB_NAME)
conn.close()
template_engine.dispose()
def setup_package():
_create_database()
engine = sa.create_engine("postgres://[email protected]/%s" % DB_NAME, echo=False)
session = sa.orm.scoped_session(sa.orm.sessionmaker())
session.configure(bind=engine)
Base.metadata.bind = engine
Base.metadata.create_all()
def teardown_package():
# no need to do anything as the old database is dropped at the start of every run
В допълнение, всички класове на тестови случаи са подкласове от базов клас, който, което е важно, дефинира общ tearDown
метод:
class BaseTest(unittest.TestCase):
def setUp(self):
# This makes things nicer if the previous test fails
# - without this all subsequent tests fail
self.tearDown()
self.config = testing.setUp()
def tearDown(self):
testing.tearDown()
session.expunge_all()
session.rollback()
Подкласовете често заместват базовия setUp
, но обикновено няма нужда да се отменя tearDown
- чрез връщане назад на транзакцията гарантира, че следващият тест ще започне върху напълно чиста база данни.