2016-09-07 1 views
1

J'ai un ensemble de tests Specflow que j'exécute et j'essaie d'écrire les résultats jusqu'à présent dans un fichier après la fin de chaque scénario, puis je réécrivez à la fin de l'ensemble du test. Si j'exécute les tests en mode débogage, alors ce code est frappé après chaque scénario, mais le fichier n'apparaît dans l'Explorateur Windows qu'après la fin de tous les tests (ou je force les tests à s'arrêter). Le code ci-dessous, qui écrit dans le fichier, se trouve dans un projet distinct du projet de test Specflow.Le fichier C# n'est pas écrit tant que l'application n'est pas terminée

Au départ, je ne chasse et eu ce à la place de StreamWriter:

using (var file = new FileInfo(filePath).AppendText()) 

Mais qui ne fonctionnait pas, donc après avoir examiné des divers exemples sur Internet j'ai ajouté Flush supplémentaire, Fermer, puis processus. Début, changé en StreamWriter et aucun d'eux n'a aidé. Le code actuel qui ne fonctionne toujours pas est:

private string rootFolderPath = Directory.GetParent(@"..\..\..\..") [email protected]"\"; 
    public void WriteAllTestScenarioNames(List<ScenarioResult> results, string fileName, string directoryName) 
    { 
     results.Sort(); 
     Directory.CreateDirectory(rootFolderPath + directoryName); 
     string filePath = rootFolderPath + directoryName + @"\" + fileName; 
     using (var file = new System.IO.StreamWriter(filePath)) 
     { 
      file.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString()); 
      foreach (var scenarioResult in results) 
      { 
       file.WriteLine(scenarioResult.ToString()); 
      } 
      file.Flush();//flush the file to ensure that it's written now 
      file.Close();//flush the file to ensure that it's written now 
     } 
     Process.Start(filePath); //flush the file to ensure that it's written now 
    } 

Dans l'exemple que je suis en train il n'y a que trois lignes dans le fichier de sortie quand il se termine enfin et les créés, modifiés et accédés dates dans les propriétés du fichier dans Windows Explorer sont identiques.

J'utilise Windows 7 Enterprise SP1 64 bits avec .NET Framework 4.5.2

+0

peut-être, j'ai oublié de mentionner, la classe qui fait l'écriture de fichier est dans un projet/assemblage différent au projet de test Specflow. – Steve

Répondre

0

Il semble que le fichier est en cours d'écriture, la question est qu'il ne montrait pas dans l'Explorateur Windows. Je suis retourné en mode débogage, vérifié dans l'Explorateur, le fichier n'était pas là. J'ai copié le chemin du fichier à partir de la valeur de la variable et ouvert ce chemin exact dans Notepad ++ et le fichier était là. Suite à cela le fichier est maintenant affiché dans l'Explorateur et mise à jour après chaque scénario de test se termine.

Edit: Il semble que la question était

private string rootFolderPath = Directory.GetParent(@"..\..\..\..") [email protected]"\"; 

retournait un résultat différent après chaque scénario à ce qu'il était après l'essai. L'un était à la racine de mon dossier utilisateur (correct) et les 3 autres répertoires au-dessus du dossier du projet Specflow. Dans le premier dossier, il sort seulement à la fin, mais dans la seconde il est mis à jour après chaque scénario.

0

Essayez ceci:

public void WriteAllTestScenarioNames(List<ScenarioResult> results, string fileName, string directoryName) 
{ 
    results.Sort(); 
    Directory.CreateDirectory(rootFolderPath + directoryName); 
    string filePath = rootFolderPath + directoryName + @"\" + fileName; 
    FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write); 
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(fs)) 
    { 
     file.WriteLine(DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString()); 
     foreach (var scenarioResult in results) 
     { 
      file.WriteLine(scenarioResult.ToString()); 
     } 
    } 
    fs.Close(); 

} 

Vérifiez également si le filePath se forme correctement et si vous avez la permission d'écrire dans ce domaine - je pense qu'il ne peut pas être se forme correctement.

+0

J'ai la permission d'écrire dans le dossier, exactement le même nom de fichier et le même dossier est utilisé pendant les tests comme à la fin. J'ai découvert que le problème semble avoir été avec Windows Explorer ne montrant pas le fichier, mais je pourrais l'ouvrir dans Notepad ++ en utilisant le chemin de fichier exact. Maintenant, ça ne semble plus être un problème quand je fais des tests, je ne sais pas pourquoi. – Steve