Unity游戏框架搭建笔记---测试驱动,UnityTestRunner

Calandra ·
更新时间:2024-09-21
· 574 次阅读

不了解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 


作者:懒羊羊爱大便



测试驱动 unity 测试 框架

需要 登录 后方可回复, 如果你还没有账号请 注册新账号