2010-02-05 13 views
2

Je voudrais à l'unité test de la méthode suivanteCréer un fichier csv comme StreamReader à la volée

public IEnumerable<T> GetData<T>(StreamReader fileStream) where T : new() 

StreamReader doit être un fichier au format CSV, avec les noms de colonnes particulières.

Est-il possible de créer de tels fichiers dans le code, plutôt que de devoir en avoir beaucoup sur le système de fichiers pour chaque test unitaire?

Des idées?

MISE À JOUR:

vient de réaliser la bibliothèque, je me sers Linq2Csv, a des méthodes pour faire exactement ce

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

Répondre

1

Bien sûr:

var buffer = Encoding.Default.GetBytes("ab;cd;ef"); 
using (var stream = new MemoryStream(buffer)) 
using (var reader = new StreamReader(stream)) 
{ 
    var actual = GetData<SomeClass>(reader); 
    // TODO: assert on actual 
} 
1

Dans votre essai, vous pouvez passer la méthode un StreamReader qui lit un MemoryStream au lieu d'un fichier ou FileStream. Le MemoryStream à son tour peut être rempli avec du contenu qui ressemble au contenu du fichier pendant l'arrangement de test.

1

Idéalement, changer la signature à:

public IEnumerable<T> GetData<T>(TextReader fileStream) where T : new() 

Ensuite, vous pouvez passer dans un StringReader très facilement.

Alternatives:

  • Demandez des exemples de fichiers intégrés dans votre équipement d'essai, chercher des flux avec Assembly.GetManifestResourceStream() et créer un StreamReader de cette
  • Utilisez Encoding.GetBytes(text) et envelopper le résultat dans une MemoryStream, puis construire un StreamReader sur cette

Pour les tests courts, je voudrais aller avec la version StringReader. Pour plus de données, l'intégration d'un fichier dans votre ensemble de test fonctionne très bien.

Questions connexes