2008-11-13 9 views
16

J'écris un programme ruby ​​qui exécute des utilitaires de ligne de commande externes. Comment puis-je me moquer du système de fichiers de mes tests rspec afin que je puisse facilement mettre en place une hiérarchie de fichiers et la vérifier après le test. Il serait également préférable d'être implémenté en RAM afin que les tests puissent être exécutés rapidement.Système de fichiers maquette dans les tests d'intégration

Je réalise que je ne trouve peut-être pas de solution portable car mes utilitaires externes sont des programmes natifs interagissant directement avec les services de fichiers du système d'exploitation. Linux est ma plate-forme principale et la solution pour cela suffirait.

Répondre

8

Peut-être que cela ne répondra pas à votre question directement, mais dans ce cas, j'ai tendance à créer un répertoire temporaire pendant la configuration du test et à l'enlever lors du démontage. Bien sûr, vous devez également vous assurer que l'application écrit dans ce répertoire temporaire. J'ai toujours une option de configuration définissant le répertoire de destination que je peux écraser pendant le test.

Quand il s'agit d'assertions, j'utilise File.exist? ou File.directory?, mais bien sûr vous pouvez créer vos propres wrappers autour. Si vous avez besoin d'un état initial, vous pouvez créer un répertoire qui peut être utilisé comme un projecteur et qui sera copié dans le répertoire provisoire pendant l'installation du test.

+0

Cela pourrait fonctionner avec le système de fichiers ramdisk, mais je cherchais une solution plus avancée. – JtR

+0

Où créez-vous des répertoires temporaires? Est-il prudent de créer et de supprimer/tmp/my_test_dir? –

5

Vous pouvez créer un gros fichier (taille de votre disque fictif) et monter le fichier en tant que loop-back device. Vous pouvez créer n'importe quel système de fichiers et structure de répertoire sur cet appareil.
Vous pouvez créer 2 d'entre eux et faire même une comparaison de diff simple pour garantir l'intégrité des données après les tests.
J'espère que je comprends bien vos besoins, car je ne sais pas pourquoi une simple solution de disque virtuel n'est pas assez bonne.
This pourrait également être pertinent.

+0

Merde, c'est une vraie réponse geek, mais probablement pas pour la plupart des rubis. Cependant, cela devrait fonctionner. Je vais voter pour le facteur geek. :-) –

+0

Je prendrai ceci comme un compliment :) – Ilya

+0

Vous pourriez prendre ce fil un peu plus loin avec unionfs: http://en.wikipedia.org/wiki/UnionFS – Frobbit

36

Avez-vous vérifié FakeFS ou MockFS ?

Remarque: Le lien d'origine vers MockFS ne fonctionne pas. Il looks like il n'est plus maintenu.

+0

Non, je n'ai pas, merci! – JtR

+0

Nice - Je suis encore à l'essayer, mais c'est exactement ce que je cherche ... –

+0

Vraiment sympa, aide Rspec livrée! –

Questions connexes