Créer un fichier Au cours de l'unité de test - Impossible d'ouvrir à écrire - TestDriven.Net et NUnit

StackOverflow https://stackoverflow.com/questions/4670890

  •  10-10-2019
  •  | 
  •  

Question

Je teste un code qui a besoin d'utiliser l'objet FileInfo et DirectoryInfo et, au lieu d'écrire un wrapper et plusieurs interfaces pour résoudre ce problème, je pensais que ce serait une bonne idée de créer des fichiers lors du démarrage du test, puis supprimer les fichiers après le test est effectué. Ceci est la façon dont je crée les fichiers:

public static void CreateTestSchedules(int quantity)
{
    String folder = Path.Combine(Directory.GetCurrentDirectory(), "FolderFiles");
    for(int quantity=10; quantity > 0; quantity--)
    {
       String filename = Path.GetTempFileName();
       using (FileStream fileStream = File.Create(Path.Combine(folder, filename)))
       {
            XDocument fileContent = Helper.CreateContent(filename);
            Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(fileContent.ToString());

            fileStream.Write(bytes, 0, bytes.Length);
            fileStream.Flush();
            fileStream.Close();
        }
     }
}

À ce stade, je ne vois pas de problème. Les fichiers sont créés dans le dossier et tout semble bien

Ensuite, lorsque l'exécution du test continue, je tente d'ouvrir l'un de ces fichiers à écrire quelque chose en elle, et je reçois une exception indiquant le fichier que je veux ouvrir pour l'écriture est utilisé par un autre processus et, après avoir vérifié avec plus de détails, je vois le processus de TestDriven.Net comme un blocage du fichier. Voici le code que j'utilise pour ouvrir et essayer de données d'écriture dans le fichier:

using (FileStream file = new FileStream(filename, FileMode.Append))
{
    Byte[] bytes = ASCIIEncoding.ASCII.GetBytes(dataToWrite.ToString());
    if (file.CanWrite)
    {
        file.Write(bytes, 0, bytes.Length);
    }
}

Ma question est: pourquoi est-ce qui se passe? Je ne suis pas relâcher la poignée de fichier correctement? est-il loin de voler le verrou de TestDriven.Net? dois-je en train de créer ces fichiers différemment? dois-je en train d'écrire le test d'une autre manière?

Merci d'avance pour les réponses et commentaires =).

EDIT:

résoudre ce problème spécifique (le vrai problème, comme Dave Swersky mentionné, est que le test unitaire ne doit pas toucher le système de fichiers) J'ai utilisé le lien envoyé par James Wiseman (merci encore James =) et créé le fichier avec un drapeau FileShare, de cette façon que je peux atteindre dans le fichier, ouvrez une écriture. Comme ceci:

 using (FileStream fileStream = new FileStream( filename, FileMode.Create, FileAccess.ReadWrite, **FileShare.ReadWrite**))

Avec que je peux ouvrir et écrire le au fichier. =)

Était-ce utile?

La solution

Je remarque que vous utilisez l'objet FileStream directement pour effectuer l'écriture.

Est-ce que le même problème présent si vous créez un objet StreamWriter, et l'utiliser pour les opérations de fichiers (y compris la fin)?

Une recherche sur Google relevai cet article. Vous trouverez peut-être utile. http://foson.blogspot.com/2007/10 /closing-filestream-and-streamwriter-and.html

Autres conseils

Ceci est probablement pas la réponse que vous cherchez, mais c'est exactement pourquoi vous devriez utiliser simulacres et ne pas réellement créer des fichiers.

Voici une solution prête pour se moquant du système de fichiers: http: //bugsquash.blogspot.com/2008/03/injectable-file-adapters.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top