单元测试XNA:我需要模拟我的GraphicsDevice

Bor*_*ens 3 .net c# xna unit-testing

我在使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Cyg*_*gon 7

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

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

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

有关模拟XNA图形设备依赖类的另一个讨论,请查看此问题:模拟Texture2D

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

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