我知道的单元测试有两种方法
1.从Unity的AssetStore窗口下载UnityTestTools(已下架了)
2.使用TestRuner(2018.2.5以上版本有,我用的是2018.2.7)
TestRuner的用法:
操作窗口: Window->General->Test Runner
1.playMode模式:测试含有Update部分的代码,EditMode模式:测试不含Update部分代码
2.RunAll在编辑器中执行所有的单元测试代码(我们写的测试代码) RunSelected执行所选择的单元测试代码Run all in player 在 实际设备上执行所有的单元测试代码
3.是个选择框,我们可以在框里选择Vertical Layout ,Horizontal Layout 两种窗口布局方式,Enable playmode tests for all assemblies 初次添加单元测试需要点击这里并重启unity才能写单元测试代码,否则会有报错
4.运行结果的显示框,可以看到运行时间,如果运行失败的话会显示运行堆栈。
代码编写:
PlayMode部分单元测试代码:(rider用户可以通过在rider编辑器的solution面板 右键:->add->Play Mode Test创建)
创建c#脚本,清空模版内容添加如下代码
sing System.Collections;
using NUnit.Framework;
using UnityEngine.TestTools;
namespace Sample.Tests
{
public class PlayModeTest1
{
[Test]
public void PlayModeTest1SimplePasses()
{
// Use the Assert class to test conditions.
}
// A UnityTest behaves like a coroutine in PlayMode
// and allows you to yield null to skip a frame in EditMode
[UnityTest]
public IEnumerator PlayModeTest1WithEnueratorPasses()
{
// Use the Assert class to test conditions.
// yield to skip a frame
yield return null;
}
}
}
[Test] 部分写我们不需要执行update的测试代码,
[UnityTest] 部分写需要执行update的代码 yield return null 表示执行一次update
除了Test,UnityTest这些属性之外还有
[SetUp]//单元测试运行前的准备工作(写我们的初始环境设置代码,如我们框架的启动)
[TearDown]//单元测试运行后的清除工作
在Test 和UnityTest中我们可以对结果进行验证 :
如: Assert.AreEqual(2,m_Target.SimpleIntReturn(1)) 这里验证 m_Targe.SimpleIntReturn(1)执行的结果是不是2