unit testingXNA:我需要模拟我的GraphicsDevice

我在使用XNA框架。
为了帮助我,我做了一个看起来像这样的帮助类:

ActorHolder + SpriteBatch (SpriteBatch) + ContentManager (ContentManager) - drawables (IList) - updatables (IList) + ActorHolder(GraphicsDevice, ContentManager) + Draw(GameTime) + Update(GameTime) + AddActor(IActor) + RemoveActor(IActor) + GetCollidingActors(IActor) 

现在我想对这个class级进行unit testing。 但是当你看到我的构造函数需要一个图形设备和一个内容管理器。 虽然我认为这在我的应用程序中很明显,但在我的测试中却没有。
我应该嘲笑这两个只是为了进行unit testing还是我的设计存在缺陷?

–UPDATE–
我找到了一个可能有用的项目的链接: http : //scurvytest.codeplex.com/没有任何xp,因为编码必须为社交生活腾出空间。

– 注意 –
对不起,我的UML法语,我的公司不使用它,所以我从来没有使用它,除了回到学校。

我通过在不可见窗口上实际创建一个真实的图形设备来“嘲弄”图形设备。 性能出奇的好 – 大约1500次测试需要12秒。

它允许我测试需要图形设备的代码并进行一些基本validation(例如,是正确的纹理集,是否选择了顶点缓冲区等)。 这可以通过使用带有DirectX Debug Runtime的参考光栅化器来进行更密集的检查来改进。

如果我需要validation发送到图形设备的内容,我创建了一个接口,通过该接口,被测试代码可以发送顶点 – 然后可以使用标准模拟对象框架轻松模拟。

检查此问题以获得有关模拟XNA图形设备相关类的另一个讨论: 模拟Texture2D

以下是我使用真实图形设备“模拟”的类: MockedGraphicsDeviceService.cs , MockedGraphicsDeviceService.Test.cs

(编辑:修复断开的链接)

这似乎是一个非常有效的模拟使用场景。 我不认为这个设计存在缺陷 –

存在模拟的一个原因是帮助填充在测试时不可用的接口的资源需求,例如远程对象,或者在您的情况下,图形资源。 对我来说,模拟图形设备和内容管理器似乎是合适的。

正如我从其他问题中发现的那样,GraphicsDevice不能掉以轻心。 有关XNA社区论坛的讨论特别指出了为什么不嘲笑这个问题并不是一个好主意。

我仍在寻找一个很好的解决方案。 但是,我倾向于认为:

  • 这是我的架构中的设计缺陷(我应该更多地分离我的组件)
  • 这是XNA的设计缺陷