00:00
好,前面呢,我们说了assumptions我们的假设,接下来呢,我们再来说一个嵌套测试,那这个嵌套测试呢,我们也可以来参照官方文档,我们在这一块呢,专门有这个嵌套测试,而在我们这个解用内五里边,我们加入了嵌套测试功能,我们的整个测试呢,可以更有层次的把所有的测试方法组合在一起,比如们就来参照官方文档的这个嵌套测试的实例代码,我们也来添加这么一个嵌套测试,好,我们来创专门创建一个测试类来测试我们的嵌套测试。And display name来加上这个呢,就叫我就叫嵌套测试好,那嵌套测试呢,我们将它的所有这个代码,我就直接复制过来。CTRC,然后呢来CTRLV,我们把该导入的导入进来,首先sta来找导入找va YouTube的好,没问题,然后呢,单元测试test也导进来啊,以及我们这个嵌套的这个注解,这个注解呢,也是这个ju这个里边的没问题,Before each导进来,还有我们的这个assert处我们的断言,这个断言呢,我们来导入它的这个静态方法,还是这个jupi API这个570这个包里边的,别导错,然后呢,Assert throughs啊,来也把它的方法导进来,而这个纠比API570这个包里边的,只不过呢,我们是用这个assertions,这个不是assert through,我用assertions就行,然后呢,把这个异常类也导进来,还有我们的这个assert file,这个也导进来,还是用assertions assert file这个jupi API好别导错,好OK,那这一块呢,就准备过来了,我们再来分析一下这个嵌套测试,然后这个嵌套测试呢,我来说一下,我们会发现呢,有两。
01:47
两个大类,外边呢,这么一个大类里边呢,还有一个类,包括这个里边的类呢,我记得我们在这,诶说一下我们发现呢,还有一个类,所以呢,首先如果我们这个测试层次比较嵌套的话,我们就可以在外层的这个测试类上,我们写一个net,代表呢,当前整个内层呢是一个嵌套测试,然后嵌套测试呢,接下来我们来看它是怎么写的,首先呢,它在这准备了一个sta,也就是一个站,站里面呢放一些object对象,然后来测试第一个,第一个呢,它只是做了一个非常简单拗了一个站。
02:20
他做的这个功能呢,非常简单,如果我们来跑单元测试,我们来运行一下啊,也没啥问题。好,我们这个new sta可以运行,没有任何问题,当然呢,接下来我们看什么叫嵌套测试,那这个测试类里边呢,还有一个ne嵌套测试,好然后呢,我们来看一下,在这个嵌套测试里边呢,首先写了一个叫北方一尺,北方一尺呢,就是在所有测试之前能发现呢,在这个内类里边会有三个测试,好如果我来运行第一个测试,第一个测试呢,就要来判断这个站是不是空的,大家注意啊,我们的这个站呢,现在是一个捺,它这是判断有没有元素,所以呢,我们现在如果我来运行这个方法,因为这个站呢是空的,连对象都没有,而我们要运行这个单元测试,它会调用它的北方一尺,而且呢,大家一定注意,我如果在外边,我来再来调用一个assert,呃,Ert叫闹。
03:22
Not no,我们来判断不为空,我请问大家,如果我在最外层,对它的这个判断能不能生效,因为我们以前说过,在运行每一个单元测试的时候,北方一呢都会运行,但是呢,这个北方一写造了嵌套类里边它能不能运行,如果运行了,相当于就是给stack给了一个对象,那这个not空,那就判断为真,如果不能运行,那not空,那就判断为假,因为它呢就是空的,可以来看一下走。好,我们发现呢,这一块运行失败,因为呢,我们这个就是捺,所以呢,我们这个断言这一块只能是捺,那的原因就是由于大家一定记住我们在嵌套测试情况下,外层的外层的test,然后呢,不能不能驱动咱们这个内层的北方一尺北,还有我们之前说的北方O之类的方法之类的方法,提前运行,提前或者呢,在什么之后运行,有我们这个北方,当然自然也有after each after啊,所以呢,这是我们说的嵌套测试,那所以我们的第一个,我们的第一个我们当前的运行第一个单元测试,我们的这个站是空的,没有任何问题,虽然你看着你在这拗了一个,但是又没给他复持,我们来运行里边的嵌套测试完,如果运行这个测试它呢,判断我们这个站是is emptyt,相当于我们站里边元素是空的没?
04:57
这题因为我们在运行这个测试的时候,我们前面这个北方一尺要先运行它就这样呢,拗了一个对象,那这个对象里边元素为空的,所以它运行成功,那再来接下来我们如果运行第二个单元测试,它叫呢,会抛出一个异常,它断言一定抛出一个异常,抛出一个叫这个站为空的异常,为什么它会调用站的泡方法,泡方法呢,相当于从我们这个战里边弹出一个元素出来,而弹出这个元素呢,我们当前战呢,刚拗出来里边一个元素都没有,你还想弹出来,那就会给我们抛一个们这个战是空的这个异常,所以我们这个呢就会运行成功,那断言他一定会抛异常,那是对的,因为当前站里边没元素,包括呢,我们想要看占的第一个元素pick,那它也没有元素,所以给我们也抛出的是占为空的异常,所以们这个断言就成功了,我们这一关呢是绿的,没有任何问题,当然呢,我们这样发现还有一个内部的嵌套测试,这个嵌套测试呢,有一个北方一尺,而在后边有的。
05:57
这是方法,运行之前我们的这个会先运行,那我们这个运行以后呢,如果我来运行它第一个,它呢,断言断言我们这个站里边元素不为空,不为空的原因是他给站里边push使了一个元素,但是问题的第另外一个前提就是你想要给站里边push使这个元素,你的这个站就先得拗出来,而这个站呢,拗出来是在外层的北方一尺的,所以如果外层的北方一尺被驱动了,把站拗出来的,那内层的北方一尺还给里边放元素了,那么接下来的这一块断盐就会成功走。
06:31
我们断言呢,它不为空,好确定没问题,我们断言成功,所以呢,接下来大家在嵌套测试里边又注意一点,就是呢的,我们内层的,内层的test可以驱动外层的,外层的我们说的这些before or after all,但是我们说外层的不能驱动内层的,所以大家一定注意啊,而我们内层的呢,却可以驱动外层的,所以导致我们这个站先给我们创建出对象,然后呢,在在内层北方一尺再放了元素,然后呢,元素里边呢,我们现在这个站呢,就被围空了,包括呢,我们想要弹出站里边的数据,我们判断站里边弹出的这个数据是不是等于我们刚才放的这个元素equals,那一定等于,而站里边呢,元素一旦弹出了,我们这个站呢,就重新为空AS处,哎,我们为空一定是对的。测试走。
07:26
好,所以我们这一块呢,没问题,包括呢,我们最后一个单元测试,我们来从这个站里边我们来拿看出看它的第一个元素,而第一个元素的值呢,就是我们的这个外边之前放的这个值没问题,但是呢,我们这个P方法跟pop pop方法不一样的是我们只看元素,不把这个元素弹出移除,所以呢,我们这个站里边还有元素,如果你判断站是空的,那就是false,那我们就断言站是空,一定是假的,所以呢,这个也会成功运行,那所有断言都会生效啊,这就是我们说的嵌套测试,很简单,就是内层的这个单元测试方法,可以驱动外层的北方一阿一等等这些啊测试机制,而外层的驱动不了内层的,这是我们说的嵌套测试,有了嵌套测试呢,我们要做整个大类的单元测试,我们就能看出很明显的这个层级关系,好我们先会测试出创建一个站,然后呢,当然这个站没有真正实际赋值,然后我们再在这个里边测试它的方法。
08:27
然后在这个里边呢,还有几个测试啊,这是我们说的嵌套测试。
我来说两句