2009-10-31 6 views
8

J'ai essayé de déterminer s'il existe déjà une méthode acceptée pour tester les opérations de fichiers io dans Haskell, mais je n'ai pas encore trouvé d'informations utiles pour ce que j'essaie de faire. J'écris une petite bibliothèque qui effectue diverses opérations de système de fichiers (parcourir récursivement un répertoire et renvoyer une liste de tous les fichiers; synchroniser plusieurs répertoires de sorte que chaque répertoire contienne les mêmes fichiers utilisant des inodes que le test d'égalité et les hardlinks. ..) et je veux m'assurer qu'ils fonctionnent réellement, mais la seule façon de les tester est de créer un répertoire temporaire avec une structure connue et de comparer les résultats des fonctions exécutées sur ce répertoire temporaire avec les informations connues. résultats. Le problème est que je voudrais obtenir le plus de couverture de test possible tout en étant principalement automatisé: je ne veux pas avoir à créer la structure de répertoire à la main. J'ai cherché google et hackage, mais les paquets que j'ai vu sur le hackage n'utilisent aucun test - peut-être que je viens de choisir les mauvais - et tout ce que je trouve sur google ne traite pas de test IO.Haskell IO Testing

Toute aide serait appréciée

Merci, James

Répondre

2

Peut-être que vous pouvez trouver un moyen de faire this travail pour vous.

EDIT:

les paquets que je l'ai vu sur hackage ne pas utiliser le test

J'ai trouvé an unit testing framework pour Haskell sur Hackage. En incluant ce framework, peut-être pourriez-vous utiliser des assertions pour vérifier que les fichiers dont vous avez besoin sont présents dans les répertoires que vous voulez qu'ils soient et qu'ils correspondent à leur destination.

+0

Merci pour le lien, mais j'ai lu cette page avant et il semble que ce soit pour des fonctions pures, et maintenant je suis concerné par le test des parties impures de mes fonctions. Merci pour le lien si –

+0

Ya, je prévoyais d'utiliser HUnit et un cadre de niveau supérieur comme test-framework.Ce qui m'intéresse plus, c'est de savoir s'il existe un moyen de créer une structure de répertoire virtuelle fictive et d'intercepter les appels au système de fichiers pour pointer vers le répertoire virtuel, ou s'il y avait un framework qui générerait automatiquement le temporaire structure de répertoire à utiliser ... Tout va bien cependant, je pense que je suis venu avec une idée pour un petit cadre qui devrait être assez trivial à mettre en œuvre Merci bien –

1

Il n'y a aucune raison pour que votre code de test ne puisse pas créer un répertoire temporaire et vérifier son contenu après l'exécution de votre code impur.

+0

C'est là que je vais probablement finir à , Je voulais juste savoir s'il y avait une façon standard d'effectuer de tels contrôles, merci bien –

+0

C'est en fait comme ça que vous devriez le faire. La structure du dossier/fichier est vos données de test, la structure après les opérations est le résultat de votre test. Vous devez le préparer pour vos tests. Si vous ne voulez pas le créer manuellement, utilisez les fonctions d'E/S basiques de Haskell pour créer cette structure dans testSetUp, puis, une fois les tests terminés, supprimez-le dans testTearDown. Ou fondamentalement créer avant le test, supprimer après le test. – yoosiba

2

HUnit est la bibliothèque habituelle pour les tests basés sur les E/S. Je ne connais pas un ensemble de propriétés/combinateurs pour les actions de fichiers - ce serait utile.

+0

Très bien, on dirait que je dois trouver quelque chose alors. Merci pour la réponse –

1

Si vous souhaitez principalement tester automatiquement le code monadique, vous pouvez rechercher dans Monadic QuickCheck. Vous pouvez écrire des propriétés qui devraient selon vous être vrai, comme

  • Si vous créez un fichier avec l'autorisation de lecture, il sera possible d'ouvrir le fichier pour la lecture.

  • Si vous supprimez un fichier, il ne s'ouvre pas.

  • Peu importe ce que vous pensez ...

QuickCheck produira alors des tests aléatoires.

+0

Merci pour le lien, je vais le vérifier –

+0

Ceci est fait d'une manière contrôlée, de sorte que, par exemple. le fichier supprimé n'est pas définitivement supprimé? – amindfv

+0

Quelqu'un d'autre a maintenant le contrôle du domaine chalmers.se. – dg123