91 votes

Existe-il des Faux Système de Fichiers de cadres pour Java?

Je suis l'introduction de tests dans un projet qui fait un usage intensif des opérations d'e / s (le système de fichier, dans ce cas). Le système de constamment s'ouvre/se ferme fichiers, vérifie si les fichiers existent, les supprime, et cætera.

Il est vite devenu évident que régulière, se moquant de ne pas être d'une grande utilité, car cela permettrait de faire mes tests dur à mettre en place et de la raison. D'autre part, d'avoir un faux système de fichiers serait génial, et je pense, assez facile à mettre en place.

Il semble que le ruby gars ont fait de nouveau, et il y a exactement ce que je demande à ruby: http://ozmm.org/posts/fakefs.html.

Est-il quelque chose de similaire à distance pour Java?

59voto

Michael Deardeuff Points 3425

J'ai utilisé Apache Commons VFS avant à grand succès. Il semble être beaucoup plus comme la coutume FileSystemProvider un autre répondeur est mentionné dans Java7.

Il est livré pré-chargé avec plusieurs fichiers système implémentations: Fichier, RAM, S/FTP, et Jar pour n'en nommer que quelques-unes. J'ai aussi vu un plugin pour S3.


Mise à jour (3 ans plus tard)

Google a un open-source, en mémoire de la mise en œuvre de Java 7 FileSystemProvider. Le projet est appelé jimfs.

C'est une grande victoire si vous préférez utiliser les Api standard sur les Api d'Apache.

36voto

Stephen C Points 255558

Dans Java 6 et les versions antérieures, il est difficile, parce que des classes comme l' File et FileInputStream fournir aucun moyen de dispatcher les différents "virtuel systèmes de fichiers" en Java de l'espace.

Dans Java 7, il ya un soutien pour les systèmes de fichier virtuels; voir le Développement d'un Personnalisé Fournisseur de Système de Fichiers. Je ne sais pas si cela va vous permettre de faire ce que vous voulez faire, mais c'est un bon endroit pour commencer à chercher.


Meh. Le fait qu'il ne semble pas réellement être tout faux système de fichiers, je pense que je vais mettre en œuvre un minimum de mise en œuvre, par moi-même. Je ne rien gagner en utilisant FileSystemProvider

En fait, vous gagnez en utilisant FileSystemProvider:

  • Vous mettre en place quelque chose qui (si elle est publiée sous une licence open source) pourrait être très utile à d'autres personnes dans votre position, et pour d'autres fins.

  • Vous rendre plus facile pour vous-même si vous décidez de passer à un FileSystemProvider que quelqu'un d'autre peut-être travailler sur la droite maintenant.

8voto

Bohemian Points 134107

Vous pouvez résumé l'utilisation de l' File en utilisant l'intention de "quelque part pour écrire des données" par l'évolution de votre API pour utiliser un OutputStream au lieu de File, puis de passer de l'API un FileOutputStream dans votre code de production, mais passer à un ByteArrayOutputStream de vos tests. Un ByteArrayOutputStream est un flux de mémoire, donc c'est très rapide et vous pouvez simplement inspecter son contenu à l'aide de ses méthodes - c'est parfait pour les tests. Il y a également le correspondant ByteArrayInputStream si vous souhaitez lire les données.

Les systèmes de fichiers sont généralement assez rapide, sauf si vous faisiez une grande partie des e/S de Fichier dans vos tests, je n'aurais pas la peine.

Notez que la création d'un java File objet n'est pas de créer un fichier sur le disque, c'est à dire le code suivant ne cause pas de changement de disque:

File f = new File("somepath"); // doesn't create a file on disk

4voto

Paŭlo Ebermann Points 35526

Un moyen simple serait d'utiliser votre système de façon de fournir un système de fichiers basé totalement sur RAM - tempfs sur Linux, un RAM disque sur Windows.

4voto

Deano Points 41

MockFTPServer semble avoir un couple de Faux système de fichiers implémentations (Unix/Windows)

Il semble que vous pouvez utiliser ces faux système de fichiers implémentations tout à fait séparément de FTP de concepts. J'essaie maintenant exactement la même pursposes comme vous l'avez indiqué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X