2011-01-12 5 views
3

Ein Teil eines Projekts, das ich Unit-Tests schreibe, extrahiert Daten aus einem JPEG-Header.Unit Testing - Verwenden von Image als Ressource im Testprojekt

Ich möchte einen Komponententest erstellen, der diese Extraktion unter Verwendung eines bekannten Bildes testet (damit ich die bekannten Eigenschaften dieses Bildes testen kann).

Es erscheint mir logisch, dass dieses Beispielbild im Testprojekt als Ressource gespeichert wird, aber ich bin mir nicht sicher, wie das geht. Wenn es ein WPF-Projekt wäre, würde ich einfach die Pack-Syntax verwenden.

Gibt es eine Best Practice für so etwas (oder sogar etwas, das funktionieren würde)?

Danke, WTS

Antwort

2

sehen, die mich in die spitz (bzw. , vielleicht passender, eine) richtige Richtung. Es fühlt sich ein bisschen klumpig an, aber es funktioniert.

Legen Sie zuerst das Bild als Inhaltsressource mit Immer kopieren fest.

Dann verwenden Sie die folgende Hilfsfunktion (durch verschiedene Tests verwendet):

private string GetValidFileName() 
{ 
    FileInfo fileInfo = new FileInfo(Assembly.GetExecutingAssembly().Location); 
    return Path.Combine(fileInfo.DirectoryName, @"Resources\Sample.jpg"); 
} 
+0

Ich denke, Matthews Lösung ist eigentlich sauberer, da es bedeutet, dass Ihre Unit-Tests sind * nur * abhängig von der Montage, nicht auf andere Ressourcen –

+0

Ich stimme zu, außer in diesem Fall wollte ich die Fähigkeit, das Bild zu tauschen. –

5

Sie können das Bild in Ihrem Testprojekt als eingebettete Ressource umfassen.
Dann können Sie den folgenden Code verwenden, um den Strom des Bildes zu erhalten: Dies basiert auf @Matthew Manelas Gesendete Antwort

Assembly.GetExecutingAssembly().GetManifestResourceStream("TestProject.TestImages.myImage.png"); 

Weitere Informationen this link

+0

+1 für mich auf dem richtigen Weg setzen. Ich wollte nicht den Stream, sondern einen absoluten Dateipfad, aber ich habe Reflektion verwendet, wie Sie es vorgeschlagen haben. Siehe meine gepostete Antwort. –