在单元测试中访问XNA ContentManager?

时间:2011-04-08 15:53:51

标签: unit-testing xna

我是XNA游戏开发的新手,我刚刚开始编写一个小型3D游戏。我已经编写了几个单元测试来测试我的代码,但是我遇到了一个问题。当我想要单元测试需要访问模型的模块时,我还没有找到一种方法来创建一个用于加载模型的ContentManager。在适当的游戏中,ContentManager由框架提供。在我的单元测试中,我必须自己创建,但我不知道如何做到这一点。

使用ContentManager加载模型的替代方法是以编程方式创建Model对象,但这似乎相当繁琐。另一个替代方案是使用例如Moq模拟模型,但这似乎同样乏味。

还有其他人遇到过这个问题并解决了吗?

2 个答案:

答案 0 :(得分:2)

单元测试XNA项目是一个常见问题,也是经常讨论的问题。通常,问题是由于需要访问Game,GraphicsDevice或(在您的情况下)ContentManager的实例,并且没有任何简单的方法来获取它。

您可以查看相关讨论hereherehere

我认为普遍接受的做法是重新评估您要测试的内容,看看您是否确实需要这些参考,或者您是否可以找到解决方法。

如果不这样,你的测试用例是否可以通过游戏测试充分覆盖?

如果上述情况都不适用,由于父类/接口对它们的要求,模拟对象可能会相当困难,但我听说有人这样做。我也听说可以使用不可见的形式实际创建一个GraphicsDevice,但我自己没有这样做。

对于我自己的测试,我没有测试任何图形元素(绘图,资源加载等)。它确实在我的代码覆盖中留下了一点漏洞,但在花了几天寻找解决这个问题的方法,而没有找到任何答案之后,我决定测试我的库函数(这在我的工作中完成了大部分工作)无论如何项目都很好。

答案 1 :(得分:0)

The code in this answer说明了如何创建ContentManager的独立实例。