不了解TDD的同学可以参考https://www.zhihu.com/question/28729261/answer/1058317111
这里我们主要学习一下单元测试在Unity中的使用。
点击Test Runner,就会打开一个新的窗口,会引导创建一个新的测试脚本,我们现在使用EditorMode来学习。
现在创建了一个Test文件和一个类DamageCalculator,注意Tests的程序集需要引用Scripts的程序集才能使用其中的代码。
public class DamageCalculator
{
public static int CalculateDamage(int damage, float defence)
{
return Convert.ToInt32(damage * (1 - defence));
}
}
public class LearnTest
{
[Test]
public void 测试受到伤害()
{
int finalDamage = DamageCalculator.CalculateDamage(10, 0.5f);
Assert.AreEqual(finalDamage, 10 * 0.5f);
}
}
[Test]属性的标记这个方法要用来测试
在窗口中就可以看到,双击就可以运行
绿色就是通过了,Assert里面有很多断言的方法,大家可以自行查阅API,这里只教一些使用流程。
TestRunner一般会配合NSubstitute来使用,https://github.com/nsubstitute/NSubstitute/tree/master/docs/downloads
NSubstitute.2.0.3.0.zip下载这个即可,下面来讲一下这个库怎么使用,
还是上面收到伤害的测试
public class Controller
{
public void UpdateRun(IRun runner)
{
runner.Run();
}
}
public interface IRun
{
void Run();
}
现在有一个控制器,我们需要测试控制器的UpdateRun是否正常,方法需要一个IRun接口,但是现在还没写实现这个接口的具体类,那么要怎么测试呢?
[Test]
public void 测试UpdateRun()
{
//创建一个IRun接口
IRun runner = Substitute.For();
Controller controller = new Controller();
controller.UpdateRun(runner);
//判断runner的Run方法有没有被执行
runner.Received().Run();
}
如果把上面的UpdateRun注释掉,
可以清楚看到报错信息,期望接收一个符合的调用,但是却没有被调用
判断有没有被执行在后面的消息系统测试中经常使用,还有判断执行次数,设定返回值,判断参数类型等等,可以查看API来抉择使用,测试的使用会在后面的文章中多次出现,遇到不会的再查就ok
https://www.cnblogs.com/gaochundong/archive/2013/05/22/nsubstitute_manual.html使用手册
GIT地址---https://github.com/so-sos-so/SoF
作者:懒羊羊爱大便