unity Test Tools 测试

孙广东 2015.9.13

Model based testing framework

StrangeIoc

https://bitbucket.org/Unity-Technologies/unitytesttools

https://bitbucket.org/Unity-Technologies/unitytesttools/wiki/Home

Nunit 和 NSubstitute 库

每个软件系统包括的功能单位。 在面向对象的语言,功能的最小单位是一个方法。 这些方法通常取决于其他 方法和类。如果你要测试 方法,将会出现一些挑战。 第一个挑战是,外部依赖项并不容易设置,例如某些对象可能需要复杂 的初始化。 第二个挑战是测试验证 要求得到某些行为的其他类中使用的特定的执行路径。 最后,调用外部类的方法可能导致一些变化在一个环境中可能不会回滚,例如从数据库中删除一 个真实的记录。

单元测试是测试单元 功能 在孤立的环境中。与所有的依赖关系 孤立的 。这意味着该测试在测试特定的环境,只有一个执行路径是可工作的。

有五个测试双模式: 模拟虚拟对象Dummy object,Test stub, Test spy, Mock 和 Fake。

Unit Tests单元测试

什么"单元测试"。在这篇文章的上下文中,它将被定义为是一个测试: 用代码编写。

集中在一个 单一的 "事" (方法/类)。 没有 "外部依赖项(external dependencies)" (例如: 不依赖于 Unity 编辑器 或 需要连接到在线服务数据库 )。

Writing Unit Tests编写单元测试 若要创建 单元测试,此包使用 NUnit-一个非常受欢迎的框架,帮助创建和执行单元测试。

此外包括了 NSubstitute-一个 模拟执行 的框架(就是没有网络的话,可以模拟网络的执行 ),可以创建 "假" 的对象。这些假货 是传递给测试 而不是"真正的" 对象的方法的对象, 在那里的 "真实"的对象 不能为测试因为它创建的情况下 依赖于外部资源 (文件、 数据库、 远程服务器等)。

下面的示例演示一个简单的脚本来管理player 生命值 :

// A simple component that keeps track of health for game objects.public class HealthComponent : MonoBehaviour{public float healthAmount;public void TakeDamage(float damageAmount){healthAmount -= damageAmount;}}

对应的单元测试的例子: (要放在Editor 文件夹下 )

using Nunit.Framework; [TestFixture]public class HealthComponentTests{ [Test]public void TakeDamage_PositiveAmount_HealthUpdated(){// Create a health component with initial health = 50.HealthComponent health = new HealthComponent();health.healthAmount = 50f;health.TakeDamage(10f);// 要测试的方法// assert (verify) that healthAmount was updated.Assert.AreEqual(40f, health.healthAmount) // (预期,当前值)}}

在这个单元测试的例子里能够看到1.一个类 包含测试 [TestFixture] 特性。2.单元测试方法应 有 [Test] 特性。3. 测试构建的类,它就是要测试,与它 (调用 TakeDamage 方法) 进行交互和 断言 (验证) 之后 使用 NUnit 的预期结果断言 Assert 类。

单元测试运行程序后添加单元测试,,我们可以使用单元测试运行程序运行。从工具栏菜单中打开包含的单元测试运行程序:

它是允许执行单个测试基本运行,项目中的所有 测试或 所有以前失败的测试。有其他更高级的选项,如设置为自动运行的代码编译。测试运行程序窗口显示所有测试项目中 通过组织他们下了定义还可以显示从他们执行日志消息或异常类的。

运行能调用代码,使它能够从命令行运行所有测试。Unity.exe -projectPath PATH_TO_YOUR_PROJECT -batchmode -quit -executeMethod UnityTest.Batch.RunUnitTests -resultFilePath=C:\temp\results.xml

* ResultFilePath 参数是可选的: 它用来指定用于存储的运行所有测试生成的报表的路径。

Integration Tests集成测试

有时,单元测试是太低级。它通常需要测试多个组件、 对象和它们之间的相互作用。该软件包包含允许创建和执行测试在单独的"测试"的场景中使用真正的游戏对象和组件集成测试框架。编写集成测试 集成测试与单元测试不同不是在代码中写的。 相反,一个新的场景应该添加到项目。这场景 将包含测试对象,其中每个定义一个 单一的集成测试。

Step by Step 创建一个新的场景,用于测试 (它可以是有这些场景的命名约定,所以很容易删除它们后来在构建游戏时很有帮助)。打开运行集成测试 (从工具栏菜单中)。

Assertion component断言组件 断言组件用于安装的不变量的 GameObjects 。设置该组件不需要编写任何代码 — — 这一切都是在编辑器用户界面中。它是容易可扩展,可定制,并可以为您自己的需要配置。

如果雨后还是雨,如果忧伤过后还是忧伤,

unity Test Tools 测试

相关文章:

你感兴趣的文章:

标签云: