Модульное тестирование XNA: нужно ли мне издеваться над моим GraphicsDevice - PullRequest
3 голосов
/ 29 апреля 2009

Я дурачусь с каркасом XNA.
Чтобы помочь мне, я создал вспомогательный класс, который выглядит следующим образом:

ActorHolder
+ SpriteBatch (SpriteBatch)
+ ContentManager (ContentManager)
- drawables (IList<IDrawable>)
- updatables (IList<IUpdatable>)

+ ActorHolder(GraphicsDevice, ContentManager)
+ Draw(GameTime)
+ Update(GameTime)
+ AddActor(IActor)
+ RemoveActor(IActor)
+ GetCollidingActors(IActor)

Теперь я хочу провести модульное тестирование этого класса. Но, как вы видите, мой конструктор нуждается в графическом устройстве и контент-менеджере. Хотя я думаю, что это имеет смысл в моем приложении, это не так в моих тестах.
Должен ли я издеваться над этими двумя только для того, чтобы выполнить модульное тестирование или мой дизайн имеет недостатки?

- ОБНОВЛЕНИЕ -
Я нашел ссылку на проект, который может помочь: http://scurvytest.codeplex.com/ У вас пока нет опыта, поскольку кодирование должно немного освободить место для социальной жизни.

- Примечание -
Извините за мой французский UML, моя компания не использует его, поэтому я никогда не использовал его, кроме как в школе.

Ответы [ 3 ]

7 голосов
/ 15 октября 2009

Я "издеваюсь" над графическим устройством, фактически создавая настоящее в невидимом окне. Производительность на удивление хорошая - около 12 секунд для 1500 тестов.

Это позволяет мне тестировать код, для которого требуется графическое устройство, и выполнять некоторую базовую проверку (например, правильный ли набор текстур, выбран ли вершинный буфер и т. Д.). Это можно улучшить, используя эталонный растеризатор с DirectX Debug Runtime для более интенсивной проверки.

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

Проверьте этот вопрос для другого обсуждения о насмешливых классах, зависящих от графического устройства XNA: Mocking Texture2D

Вот классы, которые я использую, чтобы «издеваться» на реальном графическом устройстве: MockedGraphicsDeviceService.cs , MockedGraphicsDeviceService.Test.cs

(редактировать: исправлены неработающие ссылки)

2 голосов
/ 29 апреля 2009

Это похоже на очень правильный сценарий использования для насмешек. Я не думаю, что в этом дизайне есть изъян -

Одной из причин насмешек является помощь в заполнении требований к ресурсам интерфейса, недоступного во время тестирования, например, удаленных объектов или, в вашем случае, графических ресурсов. Мне кажется, здесь насмешка над графическим устройством и менеджером контента.

0 голосов
/ 06 мая 2009

Как я обнаружил из моего другого вопроса, GraphicsDevice не следует воспринимать легкомысленно. В этом обсуждении на форумах сообщества XNA, в частности, указывается, почему не стоит издеваться над этим.

Я все еще ищу хорошее решение для этого. Однако я склонен думать, что либо:

  • это недостаток дизайна в моей архитектуре (я должен больше отделять свои компоненты)
  • это недостаток дизайна в XNA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...