Nez
le testeur prend en charge setup_package()
et teardown_package()
méthodes. Voici un extrait de la documentation :
Dans mon application, j'ai setup_package()
qui ressemble à peu près à ceci :
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
De plus, toutes les classes de cas de test sont sous-classées à partir d'une classe de base, qui, surtout, définit un tearDown
commun méthode :
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()
Les sous-classes remplacent souvent la base setUp
, mais il n'est généralement pas nécessaire de remplacer tearDown
- en annulant la transaction, il garantit que le prochain test démarrera sur une base de données complètement propre.