El proyecto en el que estoy trabajando es un software de lógica de negocios envuelto como un paquete de Python. La idea es que varias secuencias de comandos o aplicaciones lo importarán, lo inicializarán y luego lo usarán.¿Cómo lograr correctamente el aislamiento de prueba con un módulo de Python con estado?
Actualmente tiene un método init() de nivel superior que realiza la inicialización y configura varias cosas, un buen ejemplo es que configura SQLAlchemy con una conexión db y almacena la sesión SA para acceso posterior. Se está almacenando en un subpaquete de mi proyecto (es decir, myproj.model.Session, para que otro código pueda obtener una sesión de SA en funcionamiento después de importar el modelo).
En resumen, esto hace que mi paquete sea completo. Estoy escribiendo pruebas unitarias para el proyecto y este comportamiento stafeful plantea algunos problemas:
-
() ya que su comportamiento depende del estado necesitarán
- pruebas futuras que se ejecute contra la (todavía no escrito) parte del controlador con un estado modelo bien conocido (por ejemplo. un pre-poblado sqlitein-memory db)
¿Debo de alguna manera refactorizar mi packag e porque la estructura actual no es la mejor (posible) práctica (tm)? :)
¿Debo dejarlo así y configurar/desmontar todo el asunto todo el tiempo? Si voy a lograr el aislamiento completo que significaría borrar completamente y volver a poblar el DB en cada prueba, ¿no es esa exageración?
Esta pregunta está realmente en el código general & prueba la estructura, pero para lo que vale estoy usando nose-1.0 para mis pruebas. Sé que el Isolate plugin probablemente podría ayudarme, pero me gustaría obtener el código correcto antes de hacer cosas extrañas en el banco de pruebas.