【问题标题】:Accessing a XNA ContentManager in a unit test?在单元测试中访问 XNA ContentManager?
【发布时间】:2011-04-09 12:51:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: unit-testing xna


    【解决方案1】:

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

    您可以看到相关讨论hereherehere

    我相信普遍接受的做法是重新评估您要测试的内容,看看您是否真的需要这些参考资料,或者您是否可以找到绕过它们的方法。

    如果做不到这一点,你的测试用例能否被游戏测试充分覆盖?

    如果以上都不适用,模拟对象可能会相当困难,因为它们的父类/接口对它们提出了要求,但我听说有人这样做。我还听说可以使用不可见的形式实际创建 GraphicsDevice,但我自己没有这样做。

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

    【讨论】:

    • 很遗憾,这也是我找到的最佳解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多