Синглтоны для упрощения модульных тестов в устаревшей кодовой базе. Хорошая идея или нет?

Народ, У меня обширная база кода .Net, и я пытаюсь познакомить команду с модульным тестированием. Они хорошие ребята, но для них это все в новинку (честно говоря, для меня это тоже в новинку).

Одна из проблем заключается в том, что кодовая база интенсивно использует статические классы в System.IO, их много в -домашние библиотеки статических классов и классов не записываются в интерфейсы (если нет реальной причины для этого в дизайне).

Я разрабатываю стратегию упрощения работы с использованием NUnit и FakeItEasy.

Для решения зависимости статических классов Я написал инструмент, который генерирует классы-оболочки и интерфейсы для существующих статических классов. например, в файле конфигурации я говорю, что мне нужны оболочки для Каталог и файл System.IO , инструмент генерирует сборку с кодом по строкам. . .

У меня действительно странная проблема, когда у меня есть приложение, которое много задействует GDI + манипуляции с изображениями. Например, кадрирование, масштабирование и т. Д. Мое приложение отлично работает в .net 2.0, но в .net 4.0 я получаю сообщения от моих пользователей о том, что оно вылетает из-за ошибки gdi + «нехватка памяти». Теперь я знаю, что ошибка gdi + "нехватка памяти" - это уловка для множества ошибок, но почему она должна работать в .net 2.0, а НЕ в .net 4.

В частности, у меня есть элемент управления, который рисует "слои" друг на друга, чтобы создать составное растровое изображение. этот элемент управления отлично работал в .net 2.0, а НЕ в .net 4.

Это происходит, когда я загружаю 10-мегапиксельный jpeg из файловой системы, и я применяю масштабирование и трансформирую изображение.

, чтобы дать еще более подробную информацию. г.

вот объем моей трассировки стека, зарегистрированной из перехваченного исключения.

  <Event>
    <TimeStamp>11/30/10 11:02:43.706</TimeStamp>
    <Source>APPro2</Source>
    <EventType>Error</EventType>
    <Message><![CDATA[##: OutOfMemoryException
Message:
Out of memory.

Stack Trace:
   at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
   at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)
   at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
   at Colorvision.Graphics.Layers.Picture.DrawBig(Graphics g) in D:\Colorvision_Workspaces\Colorvision\Graphics\Layers\Picture.cs:line 321
   at Colorvision.Graphics.LayerCollection.DrawBig(Graphics e) in D:\Colorvision_Workspaces\Colorvision\Graphics\LayerCollection.cs:line 690]]></Message>
    <EventID>0</EventID>
  </Event>

Спасибо за ваше время. будьте осторожны, так как это мой первый вопрос.

0xa3 В настоящий момент у меня нет трассировки стека, но точный вызов g.draw приведен ниже:

g.DrawImage(
    bmpBigPicture,
    new Rectangle(
        destBigX,
        destBigY,
        (int)(destBigWidth*Scale),
        (int)(destBigHeight*Scale)),
    0,
    0,
    bmpBigPicture.Width,
    bmpBigPicture.Height,
    GraphicsUnit.Pixel,
    imgAttribs
); 

где масштаб 1s 4 для 400%

14
задан AMissico 1 December 2010 в 06:09
поделиться