Как выполнить код модуля, который добавляет строку в битовую карту - PullRequest
1 голос
/ 09 сентября 2010

Я пытаюсь выполнить модульное тестирование некоторого кода, который добавляет строку в растровое изображение.Код работает нормально, когда приложение работает.Но у меня проблемы с написанием модульного теста для него.

Это SUT:

public byte[] AddStringToImage(byte[] image, string caption)
{
    using(var mstream = new MemoryStream(image))
    using (var bmp = new Bitmap(mstream))
    {

        using (var g = Graphics.FromImage(bmp))
        {
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            g.DrawString(caption, new Font("Tahoma", 30), Brushes.Red, 0, 0);
        }
        var ms = new MemoryStream();
        bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

        return ms.ToArray();
    }
}

Я надеялся, что это может быть так же просто, как передать ему байтовый массив и строку.Примерно так:

var imageContents = new byte[1000];
new Random().NextBytes(imageContents);
const string Caption = "Sold";
AddStringToImage(imageContents, Caption);

но выдает Параметр недопустим исключение в строке:

using (var bmp = new Bitmap(mstream))

Я предполагаю, что массив байтов должен бытьопределенный формат, который имеет смысл.

Как мне создать подходящий байтовый массив в модульном тесте, чтобы я мог передать его методу addStringToImage.

1 Ответ

1 голос
/ 08 февраля 2011

Вам нужно создать свой массив из заголовка BITMAP и рандомизировать только байты изображения.Формат BITMAP доступен здесь .

Кстати, то, что вы пишете, на самом деле не является модульным тестом, это интеграционный тест, поскольку на самом деле он включает как минимум 2 слоя:ваш код и код инфраструктуры, который создает экземпляр класса BITMAP.

Если вы хотите действительно выполнить модульное тестирование, вам нужно использовать mocks.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...