00:00
好,接下来我们来说assertions断言机制,那断言呢,其实是我们在做单元测试里边非常重要的一个机制,它呢从字面意思理解就是我们断定某一件事情一定会发生,如果这件事情呢没有发生,我们就认为它出现了问题,那我们这个断言呢,就是用来我们在单元测试里边检查我们的业务逻辑返回的数据是否满足我们要求的,也就是说是否合理的。那整个断言机制呢,我们都是来放在了这个assertion这个包里边,大家注意我们解UNIT5的这个包都在ju这个API里边,我们可以来看一下assertions这个包里边的所有的断言信息,所有的这个断言,那类比我们以前,我们以前想要检查一个业务逻辑的这个数据,对不对,我们一般都是这么来做的,比如在这调了一个业务逻辑,然后呢,业务逻辑返回的数据是这个我们s out打印一下,然后我们在控制台里边再看一下,这样呢都是我们以前的方式,但如果我们按照我们最标准的写法,我们在单元测试里边应该来编写。
01:00
断言也就是说一旦业务逻辑数据返回了以后,我们就断定他呢应该是什么样的,如果是这个才满足合法要求,而且断言的这个好处就是我们后来在这呢,会来做一个单元测试,我们整个项目上线以后呢,我们可以先把整个项目里边我们写的这些模测试模块让他呢全部跑一遍,我们可以clean test啊,全部跑一遍,跑完以后呢,我们再来看哪一个测试我们现在没有通过,那么就应该再来回顾代码,看是不是出现了问题,所以我们现在就应该使用断言机制,那如果有了断言机制,那所有的测试运行结束以后,测试运行结束以后。那得益于调研机制,会有一个详细的测试报告,会有一个详细的测试报告,这个测试报告里边呢,就会有哪些方法成功,哪些方法失败,失败的方法是因为什么原因,为什么没有满足你的预期,所以呢就会有这么一些报告,所以我们希望后来大家在做单元测试的时候,以后再也不要像老师一样来写c out了,我们就来合法的来写一些断言机制,那么接下来就来测试断言,那整个这个断言呢,按照这个分类,老师分了六大类,我们有对我们的简单断言,断言单个值的断言,数组的啊,包括我们一些组合断言,异常断言等等一些信息,我们就来挨个测试一下,那先来测试简单断言,我们来看一下这个断言怎么用avoid来test test测试我们的这个simple,我们来简单的assertions assertion,我们来测试简单断言它该怎么使用at test。
02:39
好,然后呢,接下来display name测试简单断言,那怎么测试呢?我们假设呢,这有一个业务逻辑啊,假设呢,我们这个业务逻辑我写在这啊,我们就是我们这个有一个返回值int啊,是我们的canalcl letter,我要计算一个东西,我们计算两个值,你给我传入in特I,还有传入一个in特阶,我们来模拟这有一段业逻辑,然后呢,我会最后给你算出I加阶的值,然后我们假设呢,写了这么一段业务逻辑,那接下来呢,我们在测试这个业务逻辑合不合法,那我写了一个二跟三,然后呢,这个业务逻辑给我返回一个值,那么认为这个值是不是满足我业务逻辑的,我就可以写一个断言叫assert equals,有我们assert equals,翻译过来就是我们判断我们这两个东西呢,这两个值,或者这两个对象它的是否相等,如果相等呢,那就一样,这个equals呢,是用它的equals方法来判断的,还有same。
03:39
Sam呢,直接是来判断我们这个引用是不是指向同一对象的,那我们现在要判断值,我们就可以来写assert equals,那我们现在写呢,没有啥提示,因为所有的都在assertions这个包下,这个包呢是一个我们点进来啊,我们看到这个包里边所有的这些断言方法,它呢基本上都是一个,我们来往下翻assert处都是一个静态方法,所以呢,我们一般情况下,我们可以把这个包全部导入进来,我们来进行操作就行了,比如它里边有一个assert equals,这个assert equals呢,它传两个参数,比如我们现在想要断言shortt,这个short值等不等于这个short值,你现在想要断言这个int等不等于这个int,所以呢,我们现在来断言在它里边呢,传入的这两个值里边,前面是你期望的值,后边是真实的值,期望的值呢,那就是我期望业务逻辑返回的事物,而真实业务逻辑返回的就是它,哎,这是我们的这个断言,那这个断言成不成功,我们来简单来编写,我们不要他的这个前缀了,就叫。
04:39
然后呢,我们把这个导入进来,那大家注意我们导入的是assertions assert equals这个包,所以呢,我们现在来看一下我们的这个断言,我来运行一下走,那么整个期间呢,没有任何的c out,比方说如果业务逻辑二加三等于五,那说明我们这个业务逻辑是对的,是我们预期成功的,没问题,然后呢,如果不是我们传了一个三加三,那业务逻辑呢,返回的就不是五,不是五以后呢,接下来就会给我们有一个提示信息。
05:11
我们来看这块的提示信息,那就是我们期望返回为五,实际上呢,业务逻辑给我们得到一个六,所以我们这一块就会有一个断言的提示信息,这就是我们断言,我们判,判定一定要相等,判定相等,而这个相等呢,我们还有一种判断,就是呢,如果不等的情况下,默认给我们的这个错误信息是这个样子的,Aer fair的这个error,然后呢,错误提示是这样,然后呢,我们看在这个ass set equals里边,它还有一种构造方法,就是呢,能传一个string message string message是什么意思,点进来,然后呢,它相当于判断你的这个值,你的预期的值等不等于实际的值,如果不等于它呢,就会给你给一个费尔的信息,而费尔的这个信息,那它最终呢,就会在这儿传进来,相当于我们这一块呢,就是一个错误信息,那我们可以自定义断言失败以后,它的这个错误提示是什么,我们可以在这来自定一下,那我们就叫道我们这个业务逻辑。
06:12
计算失败,好,我们可以来看一下啊,我说你只要不等于五,那就说明我们这个业务是计算失败的。好,我们看到呢,我们的提示就是这个样子,这是我们说的断言,那断言里边呢,还有其他的简单断言的一些用法,比如not equals,大家来测,还有这个same和not same,它测试两个东西是不是同一个对象,我们来测一下,比如呢,我在这准备了一个object,这有一个OBJ1等于new一个object。然后呢,接下来object,这还有一个OB减二也等于有一个object,那这两个object是不是一个对象呢?我们可以来assert assert assert,我们的这个same,它们是不是一个对象,我们就来判断一跟二,前边我们先来传入我们期望的值是什么,然后呢,最终我们业务逻辑实际的值,哎,我们要比较两个对象啊,那就是前边的跟后边的这个东西呢,是不是同一个对象,我们现在如果来进行一个判断,它肯定不是同一个对象,那现在好来进行一个判断,我们让前面的这个呢,给它运行成功啊。
07:28
好,我们来判断,它在这判断asert菲尔error,因为这两个呢,我们期望的对象是这个地址是D6C,然后呢,实际得到的是D4B,所以这两个呢,不是一个对象,包括呢,你自定义的这个错误信息,我们期望呢,它是一个,如果出现错误,我们就得到两个对象不一样,给他提示信息,就是两个对象不一样啊,我们可以来运行一下,而且另外我们再来说一下,如果我们是断言机制,它呢还有这么样的一个效果,那如果我们前边的断言失败了,后边的断言呢,会不会再出来假设呢,我们前边断言失败了,我们期望呢,得到一个六业务逻辑,我们也不知道算出来等于多少,我们假设现在我们自己不会进行数学运算,对吧,我可以来看一下效果。
08:16
那前面的这个断言呢,就失败了,我们会看到业务逻辑计算失败了,哎,我们呢期望是六,但是业务逻辑计算出来是五,然后呢,我们后边的断言就没有运行,所以呢,大家一定要记住,如果是断言的情况下,那前面的断言失败,前面断言失败,然后呢,后边的断言则不会执行的,后边的代码直接是所有的代码都不会执行,连断言都算不上,也就是说我们的这一块代码,它往后的代码呢都不会执行,这是我们说的断言,我们测试了简单断言,那么也可以来测试一些其他断言,比如数组断言,来看一下两个这个数字或者原始的对象类型是不是相等,哎,你可以在这来测一下,我们直接把这个方法给答案反过来复制看一下就行了啊。
09:06
Assers a equals,我们来测试这两个数组呢,等不等这两个,大家看这两数组里边的值都是一跟二,我们来看一下这两个数组呢,是不是相等的,我们导入了assertions这个包,所以呢,它里边的所有方法我们直接能用来测试一下走。好,我们来看到的,我们现在的这个断言呢,就是成功这两个数组是相等的,那如果不相等,那假设我们写一个二跟一这两个数组呢,实际上是相反的。那这两个数组呢?还相等吗?虽然这两个数组都是谬的,但是大家来看啊,这两个数组呢不相等,而他给我们说我们这个数组啊,在第零的索引呢就不一样了,我们期望呢是二,实际呢是一,然后呢,我们这个这是我们期望的值,第一个数组呢,我们期望的是二,然后呢,实际我们这个数组后边这个数组呢是一,所以呢,我们来看一下啊,我们永远传的前面就是我们期望是什么,后边才是真正的东西,而真正的东西呢,于母有可能不满足我们的期望,他也会给我们有一个详细的比较信息,当然每一个断言呢,都可以自定义错误信息,我就可以说数组内容不相等,不相等啊,这是我们来测试数组,我们也可以来测试其他的那数组的断言,还有组合断言,比如我们呢,有可能有这么一个功能,就是呢,我们希望这些断言我们全部判定成功以后,我们这个断言呢才算成功,有一个断言失败,那都算失败,所以呢,我们就可以使用组。
10:44
合短言这种方式好,来写这么一个方法来测试一下组合短言,组合短言那我们在这来测试这个,那我们怎么测试呢?组合断言有一个叫ser osertert o,好,我们现在测试测试呢,这还有一个叫啊,这有一个叫黑D,相当于我们这个组合断言,这是哪一组,我们给这个组呢起个名,然后还有一个cuable,我们可执行的,相当于我们可执行的断言,它是一个可变数组,我们能传很多的断言,所以呢,比如我们这个组合断言,那么就叫test,然后呢,它可执行的,那可执行的cuable,来看一下这个接口,这个cuable接口它呢,其实是一个函数式接口,其实我们用函数式写法就直接能写了,没有传入的参数,也没有返回的参数,所以我呢,我们可以非常方便的就来写一个小括号,没有传参,然后我们直接来在这写,写什么呢,我们。
11:44
的断言假设呢,有第一个叫asert aer true,我们认为一个东西呢是true的,认为什么是true的呢?假设一,假设我们的这个true and false true and true,然我们假设呢,这有两个计算,这两个计算呢,我认为它必须是true才行,然后呢,第二个断言,第二个断言比如呢,我们就叫aerer equals啊,我们用过的,那我们期望的结果是一,然后呢,它的目标结果也是一,那它的真实结果也是一,那么这么一写以后,这个断言呢,相当于就是成功的,那这两个断言都成功,我们s all这个呢才算是成功。
12:26
来可以看一下,好,我们这个断言呢,就是成功,如果有一个断言失败,我们期望是一,但是呢,我们这两个组合断言,其中呢,第二个断言断言失败了,来看一下,那最终呢,会是什么样的效果。好,我们发现呢,我们的断言失败,断言失败呢,就是他说,他说呢,我们期望是一,But was,二,也就说我们最终期望的值是一,但是呢,我们实际上呢,得到的是二,所以我们这个断言失败了,我们的比较失败,所以这就是我们说的组合断言,只有我们声明的所有断言,所有断言,所有断言全部成功才能往下走,断言全部需要成功,但有没有不成功以后给的这些传输消息呢?我们可以来看一下啊,有没有我们这个如果一旦不成功,我们可以来自定义消息,然后发现呢,下边没有,这就是一个cuable,当然你真正要自定义消息,其实是应该在每一个里边,在他这个处,他断言到处和处这一块断言成功,那就是如果断言失败,我们这一块应该给的是失败消息,那比如说结果不为出,然后呢,包括这块断言失败,我们应该也给一个自定义消息,叫结果不是语。
13:40
气的。结果不是二吧,结果不是一,不是一,因为我们期望是一,但真实呢是二,所以我们来看一下。那每一个断言呢,还是跟我们以前的写法一样,但是呢,我们现在必须两个断言都成功,我们才可以算啊,我们看到这一块的提示是结果不是一只有两个断元都成功,你的下边这个才可以走,比如我们来输出一个,一来输出一个这个。
14:08
来测试一下。啊,我们看到呢,下边的这个这个呢,确实没有输出啊,因为我们断言失败了,下面就不会痛,这是组合断言啊,还有我们说了说的这个叫异常断言,那我们能断定我们接下来的这个业务逻辑可能将会也就一定会抛出这个异常,如果没有抛出异常,那就说明这个业务逻辑是不对的,所以呢,我们接下来what,比如呢,我们来test exception。At test来写一个display name,我们叫异常断言,异常断言所谓的断言就是你一定要干什么,那我们接下来有一个asert exception asert看一下啊,Aser through,好,我们这呢,Exception不要,我们叫through,然后呢,我们断言它一定会抛出一个异常,一定会有一个异常,而且呢,这个异常一旦接下来呢,这一块excuable就是相当于我们哪个可执行的这个方法,那接下来这有一个string message string message,那就是一旦出错以后,我们的提示信息是什么,我可以用第三个,那我呢认为你一定会出一个数学运算异常a exception,然后呢,什么会出现数学运算异常,那你可以写一个你的业务逻辑,对吧?这假设呢是我们的业务逻辑,我们让in特哎等于十除零了,这个呢,会有数学运算异常。而。
15:40
在一旦异常出现以后,那怎么办?我给他提示,那这个啊业务逻辑,然后呢,我们as roses,那相当于我认为你一定会跑异常,如果没跑异常,我们就应该给它提提示一个错误,业务逻辑居然正常运行,对吧,就我们认为呢,这个业务逻辑是一定要破异常的,你居然给我正常运行了,我赶紧来测试一下走。
16:11
所以我们来看啊。哎,我们会看到,虽然呢,我们十除零是一个数学运算异常,但我们断言成功了,这块没有任何异常,所以呢,我们这个断言成功,我们因为我断言你要抛出异常,但是呢,如果你给计算成功了,那我就更好奇了,这个业务逻辑怎么能计算成功呢?我需要一个数学运算异常,所以我们这一块呢,就算是断言失败,好大家注意,这是我们说的异常断言,我断定你一定会出现异常断定,那么业务逻辑,业务逻辑一定出现异常,然后呢,当然还有我们说的下面这个断言,比如我们说的超时断言,那这个超时断言呢,我就断定这个业务逻辑呢,一定在我指定的这个时间内超出以后呢,就会出现异常,大家测试一下就行了。还有另外一个叫快速失败,这个东西呢,我们也可以经常使用,那来test feel at一个test。
17:13
And display name快速失败,比如呢,我们在这来进行单元测试,我们在前面呢,测了一大堆,突然在下面呢,这个测完了以后呢,我们就让他直接结束,我们要给他失败,失败结束我们不测了,那我们就可以直接给他一个费用,那相当于失败,然后呢,测试失败,那相当于直接给这给一个快速失败,甚至于呢,我们在前面做了一个判断,如果呢,你的这个值等于,呃,什么什么,假如你等于二了,就给你抛一个,这个是测试失败了,测试没有成功的往下走等等等等。好,那我们这个呢,一定会进来,所以我们来看一下,这是我们说的测试失败。
18:02
我们看到呢,这一块确实是失败,直接给我们提示信息测试失败,那如果是一等于二我走不进来,那么这个单元测试呢,就是成功的,那就没有任何问题。所以我们可以给他快速响应一个失败,这是我们说的所有的断言机制,那有了这些断言机制,我们就应该以后在单元测试里边,我们期望业务逻辑得到是什么,我们直接使用断言,使用断言的优点是什么,我们接下来如果来到单元测试里边,假设我们现在呢是当前这个项目,我们给他用clean test,让他项目呢跑一遍单元测试,只要我们这个项目上线之前能把这个单元测试呢跑一遍,那些就会有一个完整的单元测试的汇总报告,因为他要把每一个单元测试方法都给我们跑一遍,然后哪个方法成了,哪个方法败了,失败的原因是什么,他呢就会给我们有一个汇总报告,方便我们来定位。所以呢,我们后来如果是来开发我们的业务逻辑,要推荐一个业务逻辑开发完了以后呢,一个大块业务逻辑开发完以后,一定要写它的整个单元测试类来测我们业务逻辑功能的正确性,我们应用上线之前,我们先来跑一下单元测试,只有单元测试全部跑通过了,说明我业务逻辑是对的,如果失败了,那这自然会有提示,来看一下那整个提示,因为我们有三个单元测试类,第一个测试类呢,叫我们这个跑了三个,然后呢错误了一个,这一块呢叫错误啊错误就是我们未补货的异常直接出去了,这是一个错误,然后呢,接下来我们还有一些单单元措试,这一块呢,有三个,哎,这有三个失败,有一个错误,三个失败呢,我们来看这首先呢,有一个超时的这个失败,还有一个错误啊,这个是超时的这个错误,然后呢,还有一个失败,呃,这还是我们来看一下,这个是multiple哎,我们相当于有多个这个错误失败结果不是一,哎,那这就是都是我们之前写的,还有我们一个。
19:58
失败是业务计算失败等等等等,还有我们说的这个业务逻辑居然能正常运行,所以我们所有的这个测单元测试结果在这一块呢,都会给我们有一个会损报告,这块呢,跑了17个错,这个失败了三个,错误了两个,跳过了一个,跳过的这一个呢,因为我们写了得想给他呢,禁用掉了,所以我们当然就不用测了,这就是我们整个的单元测试报告,有了单元测试报告呢,我们也能很方便的定位哪些问题,比如呢,我们前面有一个red的这个意问题,Red的这个问题呢,是因为我们把red实力释放了,连不上了,所以应用一启动呢,Red也会有问题,那断言的这些哪一块失败都会有详细提示,这就是我们说的断言提示大家呢,后来在单元测试的时候,一定要用好断言提示,当所有的这个断言,大家可以完全参照官方文档assertions在这一块,这一块呢,有对我们整个断言的一些完整测试,大家可以来参照它就行了。
我来说两句