2009-04-28 87 views
3

我在与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法语,我的公司没有使用它,所以我从来没有使用它,除了回到学校。

回答

7

我是一个设计缺陷“嘲讽“图形设备实际上是在一个不可见的窗口上创建一个真实的图形设备。性能出奇的好 - 约1500次测试12秒。

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

如果我需要验证发送给图形设备的是什么,我创建了一个接口,通过这个接口,测试代码可以发送顶点 - 然后可以用标准的模拟对象框架轻松地模拟这些顶点。

检查这个问题有关嘲讽XNA图形设备相关类另一个讨论:Mocking Texture2D

下面是我使用“模拟”使用一个真正的图形设备类: MockedGraphicsDeviceService.csMockedGraphicsDeviceService.Test.cs

(编辑:修复了损坏的链接)

2

这似乎是一个非常有效的嘲笑使用场景。我不认为这种设计存在缺陷 -

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

+0

THanks。我对单元测试还很新(不允许在工作中使用它:S) – 2009-04-28 21:35:44

+0

问题是没有IGraphicsDevice。这是一个具体的课程。时间段:S – 2009-05-06 07:12:11

+0

是的 - 虽然处理起来非常糟糕 - 但您仍然可以将它包装到另一个也定义了您的界面的类中,然后嘲笑该界面......但这是一种痛苦。 – 2009-05-06 15:22:55

0

正如我从发现my other问题,GraphicsDevice是不能掉以轻心。 XNA社区论坛上的 This discussion特别指出为什么嘲笑这一点并不是一个好主意。

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

  • 它在我的建筑设计上的瑕疵(我应该脱钩我的成分更多)
  • 它在XNA
相关问题