单元测试XNA:我是否需要模拟我的GraphicsDevice
我在与XNA框架混战。
为了帮助我身边的我做了一个辅助类,看起来像这样:单元测试XNA:我是否需要模拟我的GraphicsDevice
ActorHolder
+ SpriteBatch (SpriteBatch)
+ ContentManager (ContentManager)
- drawables (IList<IDrawable>)
- updatables (IList<IUpdatable>)
+ ActorHolder(GraphicsDevice, ContentManager)
+ Draw(GameTime)
+ Update(GameTime)
+ AddActor(IActor)
+ RemoveActor(IActor)
+ GetCollidingActors(IActor)
现在我想单元测试这个类。但正如你看到我的构造函数需要一个图形设备和一个contentmanager。虽然我认为这使得我的应用程序更加灵活,但它不在我的测试中。
我应该嘲笑这两个只是为了单元测试还是我的设计有缺陷?
--UPDATE--
我找到了一个链接到一个项目,可能会助阵:http://scurvytest.codeplex.com/ 不要有任何与它的XP还为编码具有以腾出空间给社会生活一点。
- 注 -
对不起,我的UML法语,我的公司没有使用它,所以我从来没有使用它,除了回到学校。
我是一个设计缺陷“嘲讽“图形设备实际上是在一个不可见的窗口上创建一个真实的图形设备。性能出奇的好 - 约1500次测试12秒。
它允许我测试需要图形设备的代码并进行一些基本的验证(例如,是正确的纹理集合,是否选择了顶点缓冲区等)。通过将参考光栅化器与DirectX Debug Runtime结合使用,可以进一步加强检查,从而可以改进这一点。
如果我需要验证发送给图形设备的是什么,我创建了一个接口,通过这个接口,测试代码可以发送顶点 - 然后可以用标准的模拟对象框架轻松地模拟这些顶点。
检查这个问题有关嘲讽XNA图形设备相关类另一个讨论:Mocking Texture2D
下面是我使用“模拟”使用一个真正的图形设备类: MockedGraphicsDeviceService.cs,MockedGraphicsDeviceService.Test.cs
(编辑:修复了损坏的链接)
这似乎是一个非常有效的嘲笑使用场景。我不认为这种设计存在缺陷 -
嘲讽存在的一个原因是帮助填充接口的资源需求,这些接口在测试时不可用,例如远程对象,或者在您的情况下,图形资源。对我来说,嘲笑图形设备和内容管理器似乎很合适。
正如我从发现my other问题,GraphicsDevice是不能掉以轻心。 XNA社区论坛上的 This discussion特别指出为什么嘲笑这一点并不是一个好主意。
我仍在寻找一个很好的解决方案。但是我倾向于认为,要么:
- 它在我的建筑设计上的瑕疵(我应该脱钩我的成分更多)
- 它在XNA
THanks。我对单元测试还很新(不允许在工作中使用它:S) – 2009-04-28 21:35:44
问题是没有IGraphicsDevice。这是一个具体的课程。时间段:S – 2009-05-06 07:12:11
是的 - 虽然处理起来非常糟糕 - 但您仍然可以将它包装到另一个也定义了您的界面的类中,然后嘲笑该界面......但这是一种痛苦。 – 2009-05-06 15:22:55