2008-11-13 25 views
16

Estoy escribiendo un programa de ruby ​​que ejecuta algunas utilidades de línea de comandos externas. ¿Cómo podría simular el sistema de archivos de mis pruebas de rspec para poder configurar fácilmente una jerarquía de archivos y verificarla después de la prueba? También sería mejor implementarlo en ram para que las pruebas se ejecuten rápidamente.Sistema de archivos falso en las pruebas de integración

Me doy cuenta de que es posible que no encuentre una solución portátil, ya que mis utilidades externas son programas nativos que interactúan directamente con los servicios de archivos del sistema operativo. Linux es mi plataforma principal y la solución para eso sería suficiente.

Respuesta

8

Quizás esto no responda a su pregunta directamente, pero en tales casos, tiendo a crear un directorio temporal durante la configuración de la prueba y eliminarlo en el desmontaje. Por supuesto, también debe asegurarse de que la aplicación escribe en este directorio temporal. Siempre tengo una opción de configuración que define el directorio de destino que puedo sobrescribir durante la prueba.

Cuando se trata de afirmaciones, uso plain File.exist? o File.directory?, pero por supuesto puedes crear tus propios wrappers a su alrededor. Si necesita un estado inicial, puede compilar un directorio que se pueda usar como accesorio y se copiará al directorio temporal durante la configuración de la prueba.

+0

Esto podría funcionar con el sistema de archivos ramdisk, pero estaba buscando una solución más avanzada. – JtR

+0

¿Dónde creas directorios temporales? ¿Es seguro crear y eliminar/tmp/my_test_dir? –

5

Puede crear un archivo grande (tamaño del disco ficticio) y montar el archivo como loop-back device. Puede crear cualquier sistema de archivos y estructura de directorios en este dispositivo.
Puede crear 2 de ellos e incluso hacer una comparación simple para asegurar la integridad de los datos después de las pruebas.
Espero que entienda los requisitos correctamente ya que no estoy seguro de por qué una simple solución de disco RAM no es lo suficientemente buena.
This podría ser relevante también.

+0

Maldita sea, esta es una verdadera respuesta geek, pero probablemente no para la mayoría de los Rubyistas. Sin embargo, debería funcionar. Voy a votar por geek factor. :-) –

+0

tomaré esto como un cumplido :) – Ilya

+0

Podrías llevar este hilo un paso más allá con unionfs: http://en.wikipedia.org/wiki/UnionFS – Frobbit

36

¿Ha comprobado FakeFS o MockFS ?

Nota: El enlace original a MockFS no funciona. Es looks like ya no se mantiene.

+0

No, no, ¡gracias! – JtR

+0

Bueno, todavía tengo que probarlo, pero esto es exactamente lo que estoy buscando ... –

+0

¡Muy bien, el ayudante de Rspec se envió! –

Cuestiones relacionadas