Вот упрощенный тестовый пример:
Код: Выделить всё
[AvaloniaFact]
public unsafe void TestWriteableBitmap()
{
var image = new WriteableBitmap(new PixelSize(1024, 1024), new Vector(96, 96), PixelFormats.Rgba8888);
using (var lockedBitmap = image.Lock())
{
//make all 0
Unsafe.InitBlock(lockedBitmap.Address.ToPointer(), 0, (uint)(lockedBitmap.RowBytes * lockedBitmap.Size.Height));
//write 0
using (var stream = File.OpenWrite($"/home/qserj1/test/000.bit"))
{
var pixels = new byte[(uint)(lockedBitmap.RowBytes * lockedBitmap.Size.Height)];
Marshal.Copy(lockedBitmap.Address, pixels, 0, pixels.Length);
stream.Write(pixels, 0, pixels.Length);
}
}
//write 1
using (var lockedBitmap = image.Lock())
{
using (var stream = File.OpenWrite($"/home/qserj1/test/001.bit"))
{
var pixels = new byte[(uint)(lockedBitmap.RowBytes * lockedBitmap.Size.Height)];
Marshal.Copy(lockedBitmap.Address, pixels, 0, pixels.Length);
stream.Write(pixels, 0, pixels.Length);
}
}
}
Похоже, существует некоторая корреляция между запуском теста в режиме отладки и выпуском. режим, но это не ясно. Самое запутанное то, что когда этот код интегрируется в работающее приложение Avalonia, файлы, как и ожидалось, всегда содержат нули. Мне нужно оптимизировать процедуру, которая использует WriteableBitmap для создания изображений из сетевых данных, и я обнаружил неожиданные мусорные данные в изображениях в тестовой среде.
Как объяснить это несоответствие между тестовая среда и работающее приложение? Есть ли какие-либо особые соображения по написанию тестов с использованием WriteableBitmap в Avalonia с использованием XUnit/NUnit?
Avalonia 11.2 (11.1.4 тоже)
xUnit 2.6.6
Тестовое приложение: https://drive.google.com/file/d/1b18DcQ ... sp=sharing
Подробнее здесь: https://stackoverflow.com/questions/791 ... ot-in-runn