Mam klasę, która tworzy Image
z Byte[]
, wraz z inną logiką, i próbuję napisać test jednostki, który zapewnia, że instancja Image
zwrócona z mojej klasy jest tak samo jak niektóre fałszywe Image
Mam w moim test jednostkowy.Porównywanie obrazów jako tablic bajtowych dla testów jednostkowych
nie mogę znaleźć niezawodny sposób:
- Uruchom z fałszywą
Image
\Byte[]
\ Resource \ coś. - Przekaż
Byte[]
reprezentującą fałszywą rzecz do mojej klasy. - Potwierdzenie, że
Image
wrócił z mojej klasy, jest taki sam jak mój fałszywy rzecz.
Oto kod mam wymyślić do tej pory:
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));
To zawsze wraca false
.
Użycie 'getBytes (fakeBitmap)' zwraca tablicę 3 bajtowy pełną zer. Przechodząc do 'Image.FromStream()' zgłasza 'ArgumentException'. – DaveShaw
Ponieważ otrzymujesz surowy bajt "Obraz" nie może pracować z raw-bytes. Kiedy używasz tej metody 'fakeBitmap.Save (ms, ImageFormat.Png);' otrzymujesz bajty w określonym formacie. –