Ich habe eine Klasse, die ein Image
aus einem Byte[]
zusammen mit einer anderen Logik erstellt, und ich versuche, einen Komponententest zu schreiben, der besagt, dass die Image
Instanz von meiner Klasse zurückgegeben wird gleiche wie einige falsche Image
Ich habe in meiner Einheit Test.Vergleichen von Bildern als Byte-Arrays für Komponententests
Ich kann nicht eine zuverlässige Art und Weise finden:
- Starten mit einem gefälschten
Image
\Byte[]
\ Resource \ etwas. - Übergeben Sie eine
Byte[]
, die die falsche Sache zu meiner Klasse darstellt. - Assert die
Image
zurückgegeben von meiner Klasse ist das gleiche wie meine falsche Sache.
Hier ist der Code, den ich mit so weit gekommen sind:
Bitmap fakeBitmap = new Bitmap(1, 1);
Byte[] expectedBytes;
using (var ms = new MemoryStream())
{
fakeBitmap.Save(ms, ImageFormat.Png);
expectedBytes = ms.ToArray();
}
//This is where the call to class goes
Image actualImage;
using (var ms = new MemoryStream(expectedBytes))
actualImage = Image.FromStream(ms);
Byte[] actualBytes;
using (var ms = new MemoryStream())
{
actualImage.Save(ms, ImageFormat.Png);
actualBytes = ms.ToArray();
}
var areEqual =
Enumerable.SequenceEqual(expectedBytes, actualBytes);
Console.WriteLine(areEqual);
var desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
using(StreamWriter sw = new StreamWriter(Path.Combine(desktop, "expectedBytes.txt")))
sw.Write(String.Join(Environment.NewLine, expectedBytes));
using(StreamWriter sw = new StreamWriter(Path.Combine(desktop, "actualBytes.txt")))
sw.Write(String.Join(Environment.NewLine, actualBytes));
Diese immer false
zurückgibt.
Mit 'GetBytes (fakeBitmap)' gibt ein 3-Byte-Array voller Zeros. Wenn Sie das an Image.FromStream() übergeben, wird eine ArgumentException ausgelöst. – DaveShaw
Weil Sie die Raw-Bytes 'Image' erhalten, kann nicht mit Raw-Bytes arbeiten. Wenn Sie diese Methode 'fakeBitmap.Save (ms, ImageFormat.Png);' verwenden, erhalten Sie Bytes im angegebenen Format. –