2009-10-31 19 views
8

He estado tratando de averiguar si ya hay un método aceptado para probar las operaciones de archivos en Haskell, pero todavía no he encontrado ninguna información que sea útil para lo que estoy tratando de hacer.Haskell IO Testing

Estoy escribiendo una pequeña biblioteca que realiza varias operaciones del sistema de archivos (recorrer recursivamente un directorio y devolver una lista de todos los archivos; sincronizar varios directorios para que cada directorio contenga los mismos archivos usando inodos como la prueba de igualdad y enlaces duros). ..) y quiero asegurarme de que realmente funcionen, pero la única manera en que puedo pensar para probarlos es crear un directorio temporal con una estructura conocida y comparar los resultados de las funciones ejecutadas en este directorio temporal con el conocido resultados. La cuestión es que me gustaría obtener la mayor cobertura de prueba posible sin dejar de ser principalmente automática: no quiero tener que crear la estructura del directorio a mano.

He buscado en google y hackage, pero los paquetes que he visto en hackage no usan ninguna prueba, tal vez solo elegí los que no son correctos, y todo lo que encuentro en Google no trata con la prueba de IO.

Cualquier ayuda se agradece

Gracias, James

Respuesta

2

Tal vez se puede encontrar una manera de hacer this trabajo por usted.

EDIT:

los paquetes que he visto en hackage no utilice cualquier prueba

he encontrado an unit testing framework de Haskell en Hackage. Incluyendo este marco, tal vez podría usar afirmaciones para verificar que los archivos que necesita estén presentes en los directorios que desea que sean y que correspondan a su propósito previsto.

+0

Gracias por el enlace, pero ya he leído esa página y parece ser solo para funciones puras, y ahora me preocupa probar las partes impuras de mis funciones. Gracias por el enlace aunque –

+0

Ya, estaba planeando usar HUnit y algún marco de nivel superior como test-framework. Lo que más me interesa, sin embargo, es si hay alguna forma de crear una estructura de directorio virtual simulada e interceptar las llamadas al sistema de archivos para apuntar al directorio virtual, o si tal vez había un marco que automaticamente generaría el temporal estructura de directorio que se utilizará ... Está bien, creo que se me ocurrió una idea para un marco pequeño que debería ser bastante trivial para implementar Gracias –

1

No hay ninguna razón por la cual su código de prueba no puede crear un directorio temporal, y verifique su contenido después de ejecutar su código impuro.

+0

Ahí es donde probablemente voy a terminar en , Solo quería saber si había alguna forma estándar de realizar dichos controles, gracias a –

+0

. De hecho, así es como debes hacerlo. La estructura de la carpeta/archivo es su información de prueba, la estructura después de las operaciones es el resultado de su prueba. Debe prepararlo para sus pruebas. Si no desea crearlo manualmente, utilice las funciones básicas de I/O de Haskell para crear esta estructura en testSetUp, que una vez finalizadas las pruebas, elimínelas en testTearDown. O básicamente crear antes de la prueba, eliminar después de la prueba. – yoosiba

2

HUnit es la biblioteca habitual para las pruebas basadas en IO. No sé de un conjunto de propiedades/combinadores para acciones de archivos, eso sería útil.

+0

Bien, parece que tengo que pensar en algo entonces. Gracias por la respuesta –

1

Si desea pruebas principalmente automatizadas de código monádico, es posible que desee consultar Monadic QuickCheck. Puede escribir propiedades que crea que deberían ser verdad, como

  • Si crea un archivo con permiso de lectura, será posible abrir el archivo para lectura.

  • Si elimina un archivo, no se abrirá.

  • Cualquier otra cosa que pensar en ...

QuickCheck generará entonces pruebas al azar.

+0

Gracias por el enlace, lo voy a comprobar –

+0

Esto se hace de una manera controlada, por lo que, p. el archivo eliminado no se elimina permanentemente – amindfv

+0

Alguien más ahora tiene el control del dominio chalmers.se. – dg123