unitarias pruebas python unit-testing

¿Cómo hacer que las pruebas unitarias de Python siempre encuentren archivos de datos de prueba cuando se ejecutan desde diferentes directorios de trabajo?



pruebas unitarias django (2)

Esta es una pregunta sobre la configuración del entorno de prueba.

En mi proyecto, tengo algunas pruebas unitarias que acceden a archivos de datos de prueba. Estas pruebas unitarias pueden ejecutarse desde el directorio de mi proyecto a través de un corredor de prueba. O puedo ejecutar cada archivo / módulo de prueba individualmente, para propósitos de depuración, por ejemplo.

El problema es que dependiendo de dónde ejecuto las pruebas, el directorio actual es diferente. Por lo tanto, abrir un archivo de datos de prueba, como se muestra a continuación, al proporcionar una ruta relativa al directorio actual no funcionará cuando esos archivos se ejecuten desde el directorio del proyecto, ya que el archivo de datos de prueba no está en ese directorio.

f = open(''test_data.ext'', ''r'')

Pensé en usar __file__ para usar una ruta relativa al módulo de prueba actual, pero esto no funciona cuando el módulo de prueba que llama a __file__ es el que se ejecuta individualmente .

¿Cómo la gente generalmente resuelve este problema?


No estoy seguro de que sea su solución completa, pero para las pruebas unitarias en Python, siempre uso Nose . Tiene un excelente procedimiento de descubrimiento de prueba. Puedes encontrar su mecanismo here . Quizás también puedas tener alguna idea para usar en las pruebas unitarias tradicionales de Python ...

py.test también utiliza un mecanismo de descubrimiento limpio.


Una serie de maneras diferentes vienen a la mente:

  1. Establecer una variable de entorno para su directorio de datos
  2. Escriba un pequeño módulo que siempre importe con el único propósito de tener una posición fija en relación con su directorio de datos, luego llame a __file__ desde allí
  3. Generar los datos en tiempo de ejecución.
  4. Almacene sus datos en una base de datos en lugar de un archivo
  5. Almacene sus datos en una ubicación fija en el sistema de archivos en lugar de una ubicación relativa al paquete
  6. No ejecute su código de prueba directamente

La solución que tiene más sentido para usted depende de su entorno y de sus datos y programas específicos.