Je travaille sur l'implémentation d'une application de sérialiseur/désérialiseur XML raisonnablement simple en C# .NET avec VS 2008. J'ai actuellement environ 50 tests unitaires pour différentes parties du code (principalement pour les diverses opérations de sérialisation), et certains d'entre eux semblent échouer la plupart du temps lorsqu'ils traitent des E/S de fichiers.VS2008: La création de fichier échoue de manière aléatoire dans les tests unitaires?
La façon dont les tests sont structurés est que dans la méthode d'installation de test, je crée un nouveau fichier vide à un certain emplacement prédéterminé, et ferme le flux que je récupère. Ensuite, je lance quelques tests de base sur le fichier (en fonction de ce qui est exactement sous test). Dans la méthode de nettoyage, je supprime à nouveau le fichier.
Une grande partie (généralement 30 ou plus, bien que le nombre varie d'une exécution à l'autre) de mes tests unitaires échouera à la méthode initialize, affirmant qu'ils ne peuvent pas accéder au fichier que j'essaye de créer. Je ne peux pas déterminer la raison exacte, car un test qui fonctionnera une fois échoue le suivant; ils réussissent tous lorsqu'ils sont lancés individuellement.
Quel est le problème ici? Pourquoi ne puis-je pas accéder à ce fichier lors de plusieurs tests unitaires?
méthodes pertinentes pour un test unitaire qui échoueront une partie du temps:
[TestInitialize()]
public void LogFileTestInitialize()
{
this.testFolder =
System.Environment.GetFolderPath(
System.Environment.SpecialFolder.LocalApplicationData
);
this.testPath = this.testFolder + "\\empty.lfp";
System.IO.File.Create(this.testPath).Close();
}
[TestMethod()]
public void LogFileConstructorTest()
{
string filePath = this.testPath;
LogFile target = new LogFile(filePath);
Assert.AreNotEqual(null, target);
Assert.AreEqual(this.testPath, target.filePath);
Assert.AreEqual("empty.lfp", target.fileName);
Assert.AreEqual(this.testFolder + "\\empty.lfp.lfpdat", target.metaPath);
}
[TestCleanup()]
public void LogFileTestCleanup()
{
System.IO.File.Delete(this.testPath);
}
Et le constructeur LogFile()
:
public LogFile(String filePath)
{
this.entries = new List<Entry>();
this.filePath = filePath;
this.metaPath = filePath + ".lfpdat";
this.fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
}
Le message d'erreur précise:
Méthode d'initialisation LogFileParserTester.LogFileTest.LogFileTestInitialize a levé l'exception. System.IO.IOException: System.IO.IOException: Le processus ne peut pas accéder au fichier 'C: \ Users \ <utilisateur> \ AppData \ Local \ empty.lfp' parce qu'il est utilisé par un autre processus
Vous me dites - est-ce que VS2008 exécute des tests simultanément? J'ai pensé à cela, mais Google semblait indiquer que seul VS2010 prend en charge plusieurs tests simultanés. – Tim