单元测试C#/ XNA游戏项目


13

自从开始编程以来,我就一直从事游戏开发,但是从来没有非常认真过。我以业务应用程序开发人员的身份工作,但我在业余时间从事一些游戏的开发。

在商业世界中(在Microsft Web开发堆栈上),ASP.NET MVC变得非常流行,因为它易于对界面的工作方式进行单元测试。

我想知道一种设计模式(MVC,MVP,MVVM等)可以用来编写一款游戏,其中所有游戏逻辑都可以轻松进行单元测试。这可能或可行吗?我是在浪费时间吗,进行完整构建然后运行“集成”类型测试而不是单元测试会更好吗?

示例代码会很棒,但是写起来也很有用。

(我尝试添加一个单元测试标签,但没有必要的代表...)

Answers:


17

我发现这是一篇很好的文章,描述了一种用于分离功能的体系结构,以使其不仅易于重用,而且可能更易于进行单元测试:

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

某些游戏将从类似MVC的模式中受益。像国际象棋和纸牌游戏的棋盘游戏浮现在脑海。但是,在大多数情况下,这是过大的杀伤力。

我个人认为仅对本质上是算法的事物进行单元测试就足够了。当您编写游戏代码时,您将依靠的东西才能“正常工作”,并且如果无法解决,可能很难发现问题。交集测试或联网代码之类的东西。

(理想情况下,这些东西将内置在第3方框架中,因此您不必编写测试它们!)

我喜欢用于与游戏相关的事物进行单元测试的一种技术是所谓的“可视单元测试”。基本概念是对所讨论的代码(例如,交集函数)进行简单的行渲染,以及一些基本的键或鼠标分配来操纵输入。没有人说过单元测试必须自动化-他们只需要将事物分解成单个单元并进行测试即可。


好答案。我也想发布那篇文章。游戏对象组件系统是分离逻辑并能够分别对它们进行单元测试的好方法。但是,任何单元测试都无法做到的是,游戏逻辑的多个路径的复杂交互以随机顺序实时交互。这就像尝试对天气预报进行单元测试。:)
LearnCocos2D 2010年

是的,我还做了一些隔离特定功能的小测试人员。我确保对API等所做的任何更改,我始终确保这些更改仍然有效。重用下一个项目中的功能要容易得多。
伊恩

3
是的,答案很好,我喜欢该链接。我同意直到最后一行的所有内容,“没有人说过单元测试必须自动化”。:) 有无来,也许不会-但一切我读过暗示(或者直接说)是单元测试应该是自动化的,到这种地步,你只会把一个按钮来运行所有测试。否则,运行测试涉及的工作越多,则您经常进行测试的可能性就越小。当然,如果您正在谈论显示代码,则即使可能,也很难进行单元测试。
独眼巨人

近四年来,我觉得我对“可视化单元测试” 为何如此有效的理解得更好:单元测试是一种开发工具。一个典型的自动化单元测试可以告诉你,什么坏。但是,可视化单元测试可以让您探索非常复杂的算法,并帮助您快速确定出现问题的原因(尤其是与实时代码编辑结合使用时)。通常一个视觉测试可以找出问题的是你,否则必须预见到的代码,或问题的测试里没有“正确答案”(如:调整)。
Andrew Russell

单元测试需要“经常”运行的想法(例如:始终以自动化方式运行)是虚假的。不变的代码显然不需要重新测试。和代码时被修改,显影剂做的修改应这样做,同时使用合适的可用的测试(视觉,基于代码或其他方式)。显然,存在具有一定风险特征的代码,其中自动化测试是值得的时间投资。但是这种情况在游戏开发中尤为罕见。
Andrew Russell 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.