粉丝4235获赞1.9万

好了,那么接下来呢,我们来为同学们呢介绍一下单元测试,那我们说过单元测试是对程序是不是进行测试的,嗯,好,它具体是什么样子的呢?它的单元测试呢,就是针对最小的功能单元编写测试代码, 并列测试代码干嘛呢?是不是测试我们的程序的正确性呢?那么加号程序的最小功能单元呢?是方法,因此呢,单元测试就是针对加法的方法的测试,进而呢检查方法的正确性。 好,什么意思呢?比如说这个企业里面呢,你开发好一个系统,它里面可能有成千上万个方法,那我怎么去确定这些方法他有没有问题呢?当有的时候我开发的时候,我就,我就会去测试他有没有问题啊?那个只是你自己是吧?在写的过程中做了一些细微的测试,但是一旦 整个项目做完之后,那么别人有没有影响你的方法,或者说以后你的系统在其他地方去部署的时候,新环境你是不是还是要测试一次的?你怎么能确定你的系统在任何地方都不出问题呢?你都要进行什么是不是方法这些性测试啊? 这样才能保证你整个系统是不是更加的稳健啊,然后不会出 bug。 所以编写测试代码是很重要的,那我们一般是针对方法测试啊。好,那咱们目前是怎么去对我们的这个代码进行测试的?嗯, 咱目前对咱们代码进行测试,是不是咱们自己去写了一个闷方法呀?然后呢就去调什么,是不是调这个方法,然后看他跑的结果对不对?有没有出异常吧?对,咱目前就是这么干的。那么你目前这样去测试这个方法的话,会存在什么问题呢?好,首先我们的内中是 只能写一个闷方法呀,那如果一个方法测试失败的,其他测试方法会受到什么影响?比如说我去查这个所有学生的时候,结果在查所有学生的时候崩了, 那后面这些方法有没有机会跑了?没有就没有了,所以这样并不好,对吧?那有人说我每一个都加个拆盖机,那是不是很麻烦呢?好,所以这是目前存在问题。还有一点是什么呢?他无法得到测试的结果报告,需要成员自己去观察观察这个测试是否成功。 也就是说他直营一个,你是不是要去控制台看一看呢?他没有办法生成一个测试报告的。而且在企业里面你项目上线的话呢,如果你在这个服务器环境去测试的话,那他可能是没有控制台的, 那你这个测试信息你怎么去收集呢?所以他没有测试方法不方便。好,第一三点的是无法实 自动化测试。什么叫自动化测试呢?你想以后我们的项目它里面的方法可能有几万个方法。那你,你不可能说每次是不是一个人去跑啊?你是不是到处去找没有方法去跑啊?那你测试一次的话,你可能 是要跑一天呐,你到处去找累,到处去跑,没有方法,那怎么靠谱呢?那我们如果用用我们的某些技术的话来进行测试的话呢?人家做的话,测试的意思是这样的,人家可以一键把几万个方法全跑晕,直接按一个按钮,然后就全部一个的测试, 知道了吧?他可以,所以说我们问法是不能实现自动化测试,而以后人家有些技术是可以实现自动化测试的。好,那么既然我们说目前的这种测试方式不好,那么就要知道单元测试有没有一些比较好的方式进行呢?有叫借用那些单元测试框架, 这是一个框架,那么经历呢?是使用加语言实现的单元测试框架,他是开源的,也就说他是有什么前人或者一些 牛的一些公司是帮我们做好的一些技术给我们直接使用的。对,好大据啊,加纳开发者都应当学习并使用简体编写单元测试代码,对我们的程序进行测试,可以说他已经形成的加纳标准测试知识,标准测试技术, 也就说全球所有的乘务员可能对代码对加代码进行测试,可能是不是都会用到这样一个工具啊,这样一个框架来进行啊?那么此外呢,几乎所有的 idea 开发工具,就是 id 一开发工具啊, 都会集成我们的节能题,包括咱们 idl 是不是也会集成节能题框架啊?这样我们可以直接在 idl 中编写并运行节 具体测试。也就是说咱们的 idl 其实已经整合了这个知识啊,你可以直接拿来用的。那么吉利目前最新的版本是五,但是咱们可能会用四,因为同一门的这个 idl 有的版本是比较老的,它可能里面整合四整合的是比较好的。 那你用五能用四其实都可以,就像我们用 j d k 八或者用 j d k 十一,可能我们用的技术是不是还是一些经典技术啊?没有关系,对吧?好,那我们到时候可能会选择用 j d k 四啊, 那么锦鲤这样一个单元测试框架来帮我们进行方法的测试,他有什么优点呢?好,他优点是这样的,他可以灵活的选择执行哪些测试方法,可以一键执行全部测试方法,也就是说在某种程度上,人家是不是可以实现自动化测试啊?比如说我项目要上线之前,我把急用题刨一把,他就 可以把我的项目里面所有方法全部测试一遍,他是有能力全部做到测试的,这样我就可以知道我的所有方法到底哪些成功,哪些失败,对吧?或者我的业务一旦修改了,我,我没有安全感,我也可以再测一次。 那么第二点是他可以,他可以生成什么呢?全部方法的测试报告就哪一方法正确,哪一方法失败,他都会给你显示出来, 他可以一键生成测试报告。然后呢,他的这个形式就是这个样子,是吧?比如说这个方法失败的,他是红色的,成功了就怎么样,绿色的,他都会很明显的提醒出来啊。那第三点是单元测试中的某个方法,如果测试失败的,他不会影响其他测试方法的测试, 因为他的每个方法可以说都是独立进行的。然后呢,即使抛了异常或者失败了,他不会干扰别人的,别人的方法的这个测试啊,所以他是很灵活的。好,关于 精力单元测试框架呢,我们就介绍到这,接下来呢,我们来总结一下,那么精力单元测试是做什么的?嗯,他是测试我们是不是方法的正确性的对,好,那么精力单元测试的优点是什么呢? 首先人家是不是可以实现某种程度的自动化测试啊?他可以选择执行哪些测试方法,或者一键执行全部测试方法的测试,但是你一定要注意啊,前提是你要写测试方法了, 公司里面你的项目做完之后,你还要写一些测试方法是不?来测试你的情谊中的方法有没有问题啊?他一般是一个方法对应一个测试方法, 到时候你才能去一键把这些测试方法跑完的。那第二点是只有你可以生成测试报告,如果测试良好是绿色,如果测试失败是红色。第三点是单元测试中的某个方法测试失败不会影响 其他测试方法的测试,当然他有很多的优点啊,我们这里只是说一些大家能够直接能看懂的一些优点啊,那我们先认识他对吧?我们就说到这下节课我会带着同学们呢去用节省力,是不是进行快速入门啊?来教同学们如何去测试方法。 好,咱们呢就先说到这,好在上节课呢,我们已经为大家介绍了单元测试的一个概数,那我们知道他是对那种方法正确性是不是进行测试的,那么接下来呢,我们要带着什么呢?去快速入门啊? 那我们知道单元测试我们用的是什么?是不是用的是杰伦尼这样一个框架啊?那我们怎么去用他对方法的预计结果或者针对性进行测试呢?好,那我们首先分析一下,那我们第一步一般来 会将框架的架包是不是导入到项目中啊?对啊,这是别人第三方做好的技术,一般是不是都要倒进来,那么这架包呢?我其实已经放在课件里面,那第二步我们要做什么事情呢? 第二步其实我们就是相当于是要把这个盈利驾包是不是放到一个来宝包里面去,然后把它再加到我们的依赖库啊?还有印象吧? 好,那大家注意啊,我们埃利尔通常已经整合好了节省力框架,我说过他是不是属于标准测试框架,那一般来说我们的工具会整合好他,既然工具已经整合好了,我们一般是不需要自己去把这个驾包考进来的。 一般 idr 是有的,但是我们会发现很多同学的 idr 呢,他其实并没有提前就把这些价包呢下载下来,他虽然能集成,但是没有下载。所以说大家在用这个经历的框架时候,你最好先怎么样?先联网, 第一次联网就可以了,他会帮你把这个价格下来,自动下来,从此以后你就再也不需要打了,知道了吧,但如果你第一次联网下载失败的话呢,那就麻烦一点点,那你也可以采用什么? 是不是采用手工导入两个架包就可以了?这两个架包我待会会给大家的,大把这两个架包考虑到你的什么项目的来本里面去,然后把它加到依赖库啊,跟我们之前导法是一样,这真的鱼是没有整合好的情况,你最好联网整合好就可以了啊。 好,那我们第二步要干嘛呢?第二步我们就可以编写测试方法,然后该测试方法必须是公共的无参数、无法位置的非静态方法,也就是说要做成实力方法, 意思就是说这个方法只是帮咱们去刨一刨,调一下某调一下我们自己写的方法对不对就完了,所以他的要求是公开,无参无返为止。第三点是我们要在侧 方法上使用一个叫 ad test 注解,标注该方法是一个测试方法,那你加这个 in test 注解是非常重要的, 这个才是能够真正声明,是不是这个测试方法是一个测试方法呀。第四步呢,我们在测试方法中完成被测试方法的预期针对性测试。 好,这有点绕,但一定要注意啊,测试方法他只是一个什么工具方法,他是对你项目中的一些功能方法是进行测试的,是吧?所以我们应该在测试方法中完成被测试方法的预期执行性的测试,比如说你可能只是调一下,看看有没有抛异常 或者预期,这个方法应该返回一个什么结果给你,这个都可以用一些程序去实现。那最终呢,我们要选中测试方法,然后呢选择节能体运行,如果测试良好是绿色,如果测试失败呢,是红色。 那么这就是我们单元测试的一个快速入门的过程。好,大概明白这个过程呢,详细的使用,咱们还是到什么 id 中心演示一下。好,那我们从这边呢,打开我们的 id, 在 id 这个位置呢,我已经为大家建好了一个模块,这个模块呢是单元测试反射注解和做代理应用的意思, 在这边呢,我已经为大家建好了一个包,叫第一杠 unitty。 那我们来思考一下,我们用解 unit 做单元测试。首先我是不是要有一些业务方法呀?对,为什么要有业务方法呢?因为我是对方法真实性进行测试的,你要给我一些方法,我是才能对你进行测试啊。对,所以我模拟的一些业务方法啊。 那这个业务方法呢?是干嘛呢?就是帮我们呢,用登录名和密码是不进行登录的,登录成功就成功,登录失败就失败。然后呢,我这里面可能还有功能呢,是查询所有用户的名字。 那以后开发手这里面可能会有四五百行代码,可能是会出异常啊,所以我在这里面呢,直接写了一个异常模拟这个方法,是不是到时会出 bug 啊?好,那接下来我们要对他们进行什么 正确性?是不是测试?那怎么做呢?按照节律框架的观点,你首先是不是需要单独写一个测试类,然后写一个测试方法呀?知道,因为你要写着代码才能做测试啊,所以我们会在这个地方呢,右键另一个类,那么这个类呢?我们一般把它叫 test, 加你的业务类的名字 use service, 这样就代表我们的测试类是不是已经有了?测试类是独立出来的,所以他要单独写的。然后呢,我们第二步要干嘛呢?第二步是要写测试方法啊。好,我们一般采用什么呢? 一个业务方法对应什么?一个测试方法都有自己专属的测试方法。那我们应该怎么写测试方法呢?好,其实我们可以这么写啊,他应该是一个公开的没有返回值的,是不是也没有参数的?而方法名我们一般习惯性的把它叫 test, 再加上被测试方法的名字, 这样别人一眼就知道你是对按照登录名进行登录的。这个方法是不是进行测试的?对,好,测试方法呢?注意点,我来为大家记录一下。 第一点是什么呢?它必须是公开的无参数,然后怎么样无返回值的方法。 好,这是关于测试方法的注意点啊。第二点是什么呢?好,一定要注意一下,测试方法 它必须使用 at test 注解是标记啊,所以说还要注意按照框架的使用来看的话,我要用 attic 注解,这很明显是不是属于别人框架的东西啊,我是不是应该把急用的框架导进来啊?但是我刚刚说过了, idl 其实已经是不可以自动整合节能力框架,所以我们不需要倒进来啊,你不需要说在这里建一个莱宝包,然后怎么样再把驾班考进来的,它可以自动集成的。那怎么做?你直接写一个在这个地方。 好,那现在肯定是没有倒进来的,对不对?他虽然说 ida 可以集成,但是没有把这个价包关联进来的。那么当第一次倒的价包的时候呢,建议你们联网,那这样你的 id 如果没有这个经济框架的话呢,他会去网上把它下来,知道吧,以后就不需要再联网, 就永远就有了。那怎么做呢?好,我电脑已经联网了,我只要按二的键加回的键。他这边是不是有一个接力四和接力五两个版本的?那两个版本的都可以用法的,其实都差不多, 那经历四呢?比较稳定,大家应该知道老版本是不是相对来说比较稳定啊?是,所以我们就用经历四。好,那我就选择第一个,然后呢一回车他就说我要把经历四导到你的。什么,是不是导到你的项目中来啊?那我就直接点确定呗。 ok, 直接这边点确定就完了。好,这个时候大家会发现下面就会出现一个金绿色的一个什么框架包,是这两个架包,我这边是不是也已经可以使用了?是,已经倒进来了,那朋友们如果倒失败了怎么办?你可以把这两个架包是不是考到你这个 level 里面去,再把它添加到依赖库也可以啊?对,也行的,那也是一种方法, 所以我到时候把这两个价包发给朋友们的。好,那这样我的这个测试方法其实是不是有了?接下来我要正式进行什么是不是业务功能的测试了?那么业务功能怎么测试?是不是应该是要创建一个业务对象, 因为这些方法都是什么实力?方法是要拿对象掉,然后呢,我再来掉他的一个方法叫 login。 假如说我现在认为登录名是 at 密,密码是一二三四五六。 好,我这是一个正确性的一个测试,也就说我认为我这次测试是不是要登录成功啊?很明显,我一开始就确定的是 s b 和一二三四五六嘛,那我这边就怎么样, 是不是可以拿一个电量去接他这个登录的结果呀?对,好,同学们想一想。那么我现在预期这个结果应该是正确的,但是团队开发的时候,我的项目 代码是不是有可能会被其他成员动啊?大,在一个项目里面开发,那万一别人把我的业务动了,我这个方法是相对就出了 bug 啊,我这边是不是要反应出来啊?所以经历夸奖,其实他也提供了一种叫预期正确性测试的一个知识点, 你可以去测试你这个结果是不是你预期的结果,如果是测试通过,如果不是呢?测试失败,他不一定非得说看这个有没有异常的,他也可以预期正确性测试,那怎么来进行什么呢?怎么进行 预期结果的正确性测试呢?好,他用了一个知识叫淡眼 大奖。断言什么意思?断言是不是预言呐?我断言你将来怎么样,会出人头地,是不是?这个意思?是,所以说你要进,那你说我现在要断言这个 rs 结果是不是应该是登录成功?万一 以后代言失败说明怎么样?别人是不是动了我的业务啊?对啊,肯定改了我的数据,对不对?我可能一定要这个数据吗?来怎么代言呢?人家仅用的框架也提供了一个东西给大家,大的可以了解一下,我们毕竟是快速入门,我直接带大家用就可以了。他有一个类叫阿瑟特,这个单词就是断言的意思, 是不是这个人家的框架提供的?对,肯定在框架里面,可以去找一找呢?答个经理题,然后呢,在经理这个下面,是吧?继续找 在这里,对吧?然后呢,你看这里有一个是不是叫 authort 呀?断眼,你可以直接调这个,它里面有个方法呢,叫 authort s e r a s s 一二七,然后呢?有个叫 equers, 是代言结果相不相等的问题啊,你看他可以呢,填一个 什么?期待值和实际值,是不是代言这两个结果是不是一样的?对,然后你你,你看这个,他有个期待值,实际值前面还有个消息,我们一般用这个方法,前面这个消息代表是代言失败提示的消息。好,那我们应该怎么办呢?在这地方,比如说一旦代言失败,我的这边提示 您的怎么样?您的公认业务数据是不可能出 bug 啊, 或者就说你的登录业务可能出现问题,是不是提醒别人有这个错误?然后我们刚刚说过了,你要代言结果的话,你是不是应该填一个你期待值啊?那我期待值是多少啊? 是不是登录成功啊?要一模一样,你必须这个值一模一样,有的时候他在这边随便写这么长,打个感叹号,那你能期待人家后面带感叹号,你怎么能确定呢?你要看人家这个 结果嘛,对不对?你是人要代言的。然后呢?然后这个地方再来写个什么呢? 它这个地方其实是填实际值,实际值是 r s r s 是代表我是不是实际。呃,那就不对,实际值还是要放在哪里呢?放在后面。嗯,他刚提示我,我以为这个是放在前面的。好,这样就对了,这是不是期待值啊?他这边有提示,这边是什么 实际值?实际值是不是由你自己是不是测方法得到的结果呀?对,好,那我们这个测试方法其实就已经怎么样?是不是已经写好了?现在我是不是可以进行测试了? 好,怎么测试呢?你可以在这个方法任何一个位置直接右键就在这个位,任何一个位置都可以啊,直接右键,然后你会发现这边是不是有个叫 run test logan name, 是不是直接是执行这个单元测试类啊?他不是 笨方法,但是人家是不是一样可以跑?你看点一下,点一下就开始进行单元测试了,好,然后执行完之后呢?你往下看。我之前说过,我说绿色是怎么样 是成功,他现在有没有出 bug, 没有,说明我这个业务功能有没有毛病,没有。好,我再举个例子,比如说有一天有个成员呐,他不小心是把我的数据动了,或者这个数据是从其他地方发过来了,那这个数据是不是很明显有问题啊?而我现在要求是一定要是什么 m 和一二三四五六,我的业务是一定要这样子,绕线能不能测出来?可不可以测出他的错误?能。 好,那咱们是不是也是右键刨一把,刨完之后呢?大家看,我们是能够把这个问题测出来的,他是不是已经发现是登录业务有问题?红颜色,而且他说到您的功能业务是不是可能出现 bug 啊? 你说这让我们感觉登录更具体。好,这样一旦别人动了我的这个方法正确性 动作这个方法导致正确性有问题,我这边是马上可以反应过来了,他说我期待的只是登录成功,而实意只是什么,因为我们以后的密码错误,我就知道我的登录业务可能有 bug, 我就去检查一下, 好,能听懂吧。那下面这个视频要查询所有的用户啊,所有用户的名字,我是不是也要写个测试方法?那这个测试方法呢?我们把它叫 public void, 比如说 test select names。 好,然后呢?我们在这边呢做什么事情呢?其实你直接去调一下就行了,调什么呢?调由得 service 点 service names。 好,那有的时候这里需不需要断言呢?你这里不需要去断言,因为你你这个方法是没有返回值啊,而且 代言,也就说你需要代言才代言,也不是什么时候都要去代言的,那就让我不用代言,那这样的好处是什么呢?这样做的好处就是说我就看这个方法是不是有没有出 bug 就行了,如果没有出 bug, 他这个调用是不是就成功了?对,如果出现 bug 呢? 这个钓鱼会失败,到时候测试方法会标是不是红红色给你啊?来,我们来测一下,这个方法直接右键直跑呢? test 的时候呢,有 lames 点一下好,点一下。之后呢,我们来看一看,红颜色的是失败的,他说你这个方法内部是出现一个处理异常啊,那不就知道,哦,我这个测试失败了。 好,这是单独测。那接下来我再给大家说一种测试方式,我可以把这个类里面所有测试方法是自动化的跑一遍,因为人家单位测试就是个一键测试吧,我可以在这个类上面的直接他是测试整个类,看到没有?就是跑整个类啊,跑整个测试类啊, 然后在这个地方任何一个空白的位置,右键也是跑整个类的好,跑整个类的话,你会发现他把两个方法是不是都测试一把啊?那这个方法黄颜色什么意思呢?黄颜色意思就是说你的方法可能没有出异常,但是你预期的结果是不是有问题啊?所以他警告你,警告你什么?你的数据是不是可能被别人动了? 这都是黄颜色,而这个地方红色就代表你的方法是不是真的出 bug 了?对,所以他这个测试报告很完整。那即使你这里有一千个测试方法,我也只需要什么一键,是不是就可以跑完了?是啊,你之前就不是这样的,之前你肯定要一个人去测的哟,而且中间出现问题,别的方法是不是就测不了了?他这个可以一起测, 这样在企业里面就是一种自动化测试机制。而且他更厉害的是什么呢?他可以把这个系统里面,就这个模块里面所有测试方法跑一把,你可以右键的。 那这里面其实有几千个测试类,几千个测试方法是不是都可以一键测试完的?你看我直接右键跑一把了,它可以自动去寻找了,是不是也找到这个类, 看懂吧,他这个就强大,人家一键测试完了。好,那回到我们的 ppt, 关于单元测试的一个快速入门呢?我们就说到这,那咱们来总结一下 杰瑞力单元测试实验的过程是什么样子的?第一步要干嘛呀?是不是要导入杰瑞力框架架包?对对,但是需不需要我们导啊?不需要,除非你集成是不是失败了,然后你才需要自己去导架包。自己导也可以啊,就自己把它拷贝到奶粉包里面去,加到依赖库。 第二点是定义的测试方法毕竟是无参数,还要怎么样?无法维持,而且要公开,因为你这个测试方法只是为了测试他不需要接数据,是 也不需要返回结果呀。是啊,第三点是什么呢?测试方法必须使用 attex 的注解标记,这样才能成为测试方法。 那么经历测试某个方法,测试前部方法怎么处理?成功的标志是什么?测试某个方法,你的光标应该落在 方法内部,测试全方法应该放在内上面,或者放在模块上面,是不是去执行啊?对,好,那就是这样,这样子就可以了,成功的标志是这样的, 红色失败,绿色怎么样?通过他身上还有些黄颜色,代表你的方法没有出异常,但是结果与你预期的是不一样,他会做一些警告。好,但是这个框架呢,我们就说到这。 好的,在上节课程中呢,我们已经讲解了单元测试的快速入门,那么接下来呢,我们来为同学们介绍一下单元测试的一些 常用注解。这常用注解呢,用的不多啊,我们了解一下就可以了。好,我们来看一下这些常用注解啊。 那么以经历四为例,他会用到这些注解,我们用的最多的是不是就是 attet 注解,这是测试方法是必须用到的,他有一个 at b for at after at before class at after class。 我们先看 at b for hp。 fo 呢,是用来修饰实力方法,该方法会在每一个测试方法执行之前执行一次。而这个 l f 呢,是也是修饰实力方法,它会在每一个测试方法执行之后执行一次。那这个呢,它是用来修饰静态方法,会在所有测试方法执行之前执行一次, 这个呢是修复进来方法,会在所有的测试方法执行之后执行一次。他们分别呢,用于做初始化资源和释放资源呢? 因为一开始做的事情是不是都是数字化资源的?嗯,最后做的事情一般是释放资源。好,这东西了解一下就可以。那具体是什么意思呢?咱们呢?还是到 idea 中呢?去演示一下,从这边打我们 idea 在列的位置呢?我再来为同学们来写个测试类。好,其实也可以不用再写,我们在这个里面呢,演示一下就可以了。他首先说了一个注解,叫挨着什么挨着 before, 人家的要求是他只能休日。什么?是不是只能休日?实力方法好,一定要注意啊。是休日实力方法的 好,那它是这样的,比如我写个实际方法就叫 public, 然后呢? void b for。 好,在这里面呢,我来打一段提示,这段提示呢是 before 执行一次。 邓老师,这个方法谁赢一次啊?当然这个方法名你可以随便写的,你写任何方法名都可以的。那我们再来一个注解,叫什么呢?是不是叫 at after a f t r。 好,这方法名呢,我也把它改成 after, 这里面的也改成阿普特。那刚刚人家说了,他们是怎么样执行的?他们是不是在所有测试方法执行之前执行一次?那么在每个测试方法执行之前执行一次,在每个测试方法执行之后是不是执行一次啊?那我们来试一下,假如说我把这个登录这个方法测一下。 好,测的时候大家注意看,执行之前执行一次,执行之后是不是执行一次啊?他这个异常信息,有的时候他不是怎么样,他不是,是按照顺序打的。对,这个不用管,但是你如果想看的更清楚,你可以把这个怎么样,是不? 我都改对就行了,改对然后再来跑,就能看的很清楚了。好,他是执行之前执行一次,执行之后执行一次。下面这个呢?你再跑一下,他也会出现执行之前执行一次,然后再执行。我们的是不是方法呀?在执行之后执行一次啊? 那如果整个类都跑一把呢?那他会出现怎么样?每次执行之前是不是都会执行一次?是不是这样子?好,那么到这呢,其实我们就已经介绍完了,这两个注解的一个什么呢?特点呢?那他其实还有两个注解,我们要注意一下。 那剩下两个注意是修是什么方法呢?好,近代方法呢?叫什么呢?叫 before class, 然后这个叫 after class, 那就把这个地方也改成 before class。 好,把这个改成 before class。 它是在类之前呢,那就在类所有方法知音之前嘛,然后这个呢?是 after class, 也就是在类的所有方法知音之后,是不是知音一次啊?那我现在呢,直接把这个类里面的所有测试方法跑一把。 好,就让大家来看这个结果。好,他这个地方是报错了。为什么报错了?他说你是无效的测试类的错误,啥意思呢?我们刚刚说过他只能修是什么 静态方法?因为你想他在累执行之前执行一次,那我想这个方法是不是肯定是有累来掉的?所以他应该是什么静态的?静态的方法是不是给累掉的?你再跑他就不会报错了。好,再执行一下。 好,同学们,看他打出来这个信息啊,你看在所有的测试方法执行之前,是不是他先执行这个 before 克拉斯啊?对啊,那 最后是不是一定是指引这个 up class 的,对吧?我们再跑一下来看这个结果,那就是这个样子,是吧?最后指引 up class, 所有所有方法指引之前指引 before class, 所以他们只会是不是各自指引一次就可以了。那这两个是跟着什么每个测试方法走的,所以他们都是 实力的一种形式,是吧?相当于跟着他每个人的测试方法对那个对象一起掉的啊?好,那大家注意一下是什么呢? 我们这些东西能做什么?我们一般在这里面做一些什么呢?做一些初始化操作,比如说我这些测试方法需要用到一些 io 流,可能每个测试每个测试方法都要用一个新的 io 流,我是不是可以在这边把这个 io 流先弄出来啊? 然后这边就可以怎么样?到时候想办法去访问,等用完之后呢?是不是再在 auto 里面关掉啊?那如果有一些静态 资源呢?假如有些近代资源,我是不是可以在这个里面进行初始化呀?近代资源初始化之后,然后后面是不是就可以用了?等所有的初始化用完之后,我再怎么样,在这边是不是在回收啊?好,所以这些东西呢,我们简单了解一下就可以了,知道它的特点就行了,作用呢,可看具体情况具体分析啊。 好,回到我们的 ppt, 我们就说完了这些注解,那大注啊,我们说的是经历四的注解,人家经历的五是不是也有注解啊?那他的注解是这个样子的,太子注解还是都叫太子的,那他叫逼疯,一起, 你翻一下就知道,这是不是就是实力方法在每个方法执行之前呢?这个是在每个方法执行什么之后?逼疯二是不是所有方法执行之前?阿普特在所有方法执行之后?这四个注解跟我们刚刚讲那四个,四个注解的作用是怎么样? 一模一样?指人家是不是改了名字啊?是,而且我认为他这个名字改的怎么样?改的挺好的,是不是更直观一点呢?是每一个之前,每一个之后,所有之前,所有之后,就对应我们这四个注解吗? 是吧?所以他这个方法取得还挺好的。好,关于这个常用注解呢,我们呢就说到这大,并不需要去 记这个东西,是吧?你知道了解一下,培养一下我们这种注解使用的思维就可以了,因为注解开发呢,在我们以后啊是很流行的。这是为什么?我要介绍这个东西,以后咱们做项目经常用用类似于注解的方式来实现一些功能啊。好,咱们就先说到这。

看我们今天的第一大块内容啊,叫做是单元测试啊,啊,我们总共是四大块内容啊,那么第一大块内容呢?单元测试,我们先看一下它里面的这个快速入门,是吧?我们对咱们的单元测试概述一下,并且呢来看一下它的快速入门啊,怎么进行使用,这是一个简单的技术,我们不用把它搞的太麻烦,太复杂, 非常的简单,那下面来看啊啊,这里面首先的单元测试是什么?单元测试呢,就是对我们的代码的最小的功能进行一个测试的一种功能,那这里面呢最小的功能其实就是什么呀? 方法,我可以对我们的功能的最小最小单位是吧?最小单元就是这个方法呢,进行独立的测试啊,那编写测试代码时啊,这个当然是对他进行一个正确性测试了啊,这么一个技术,说来就是我们代言测试就是在进行什么呀?测试只是这个 测试的单元可以最小,这个是针对什么样方法来进行测试啊?你写好了某个方法,我这个一个类里面有很多方法,我只是对其中某一个方法测试,那我们单元测试也是可以做得到的 好,那么这个可以做到一个比较小力度的一个测试,是吧?力度啊,颗粒的力道啊,那么下面呢,在咱们这个咱们之前是如何进行单元测试的呢? 啊,其实我们原来是不是也进对代码进行过测试啊?是,这位方法是不是也进行过测试啊?教用过吗?对吧?啊,那么有什么问题呢?那么我们原来是怎么测试的?你能不能回顾一下,我找我同学回答一下我们下一个同学轮到谁了? 原来我们在测试代码是怎么测试?右键运行?右键运行是吧?那么右键运行前提是你这个内中得有什么方法?没有方法吗?对吧?你没有方法你才能右键运行吗?对吧?那么所以 其他方法呢?就应该直接或者间接的在魅方法中进行什么要用是吧才能测试是吧?很好,请坐,这是我们原来的测试方式啊。好,那么我们到底这种方式有什么问题呢?是吧?来我们来看一下啊,原来测试方式就代码,给你举个例子啊,比如说这里是 一个学生管理,对吧?系统啊,那你们是不是有登山改查是吧?一些方法啊?那么现在的话呢,我们这里面呢,你要进行测试的功能对不对?你是不是在这里面得进行调用啊? 累计调用,但是呢,到底有什么问题啊?那么这个问题是什么呢?首先是你只能在魅话中编写测试的代码,去调用其他方法进行测试,是吧?只能这个只能从魅开始,对吧?那么你间接的,不管你是直接还是间接,你都要通过魅来进行调用吗? 才能开始啊,所有的方法你要测试,你都得去在这里面进行一次调用啊,再来无法 实现自动化测试,一个方法测试失败,可能会影响其他方法的测试,比如说呢,如果你这个什么爱的方法里面包异常了,或者出现问题了,出现测试失败了,是不是有可能会影响下面的问题啊?下面代码可能会受影响嘛?就这个啊, 如果你要这个测试的话,除非呢你不受影响,你要你要不受影响,除非的话你只测试这个,你把另外两三个给他注视掉是吧?啊?那么你要这个测完好了,你要测这个就把它解,把它注视掉,把它解开,是吧?除非这样来进行测试啊, 但是呢,这样测试你得修改代码呀。啊,那么再来就是无法得到测试的报告,那么需要程序员自己去观察测试是否成功,说白就是你得自己分析,去阅读这个,或者说去看一下咱们的这个,根据这个结果,是吧,去分析出来啊,去查看到程序中的问题,或者说判断他是否 正确,就是你得自己来啊,那么如果有测试报告的话,他告诉你挂掉了,是吧?哪哪错了啊?什么什么原因错了,那么就比较好了。 好的,那么所以这种方式呢?以后呢?并不是我们真正以后在开发中啊使用的一种测试方式,对吧?或者说我们推荐的测试方式啊,那么我们有更好的一种推荐的测试的方式,这就是我们接下来要讲解的单元测试。 单元测试的话呢,不是 mate 这种单元测试,我们是使用一个叫做 gunis 单元测试框架对我们的程序来进行一个测试啊, 那么这个兼用力特征呢?他其实是一个第三方的工具包啊,是一个第三方的一种技术,意思是刚开始咱们暂是没有停工这种功能是吧?那么是第三方这个开源的组织给你提供。好的,那么我们这个呢,直接大家可以拿过来使用啊。好,那么这种呢测试 方式啊,就就可以啊,以后呢,我们在运行一个程序的时候,测试一个程序的时候,就不需要前面有方法了,我们直接呢用监狱的单元测试就可以做到啊,那这里面说了啊,就是很多的开发工具,其实已经集成了监狱的框架,我们 id 呢也集成了, 那么这款呢,一会呢,你在 id 里面你就不需要去单独的去,呃,说我自己先去下载个驾包,然后呢再把驾包复制粘贴进来,这个就不需要了啊,那这里面到时候通过 id 呢,我们一些快捷键对吧?哎,那么让我们的 id 去自动下载就行了, 所以这个你这个射手集成,这个其实啊,你也就认为是集成了啊,关系都不大。那事实上这个集成啊,不是说 id 里面自动有的啊,他其实是 id 里面会有这种快捷键,让你去自动下载兼优 nate 这样的一个驾包啊。啊,那么到时候我们自动下载就可以,那么 这种测试咱们用简约单元测试啊,对我们的代码监测是有什么优点呢?那么之前的弊端他是不是就是他的优点?那肯定能解决之前的弊端吗? 可以灵活的测试单元啊,针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立啊,各自功能是独立的, 不需要程序员去分析测试的结果会自动生成测试报告出来啊。好的,那么这里面呢,到时候我们可以看到啊,这测试完之后可能会有两种结果,一种呢是这种红色的, 还有就是这种什么呀?绿色的,那么红色的有可能打个叉,有可能打个感叹号,这种代表呢?我们测试是失败了,能行吧?哎,这里面他是相当于是这里面有有两个方法,一个叫 test 出,一个叫 test 什么 loading, 是吧?那么有两个方法,一次 自信的把这里面的方法全部运行啊,这是这个方法全部运行,但是呢出错的啊,他就给你报这种颜色,对的呢,他就给你绿色的对勾,这是这种情况, 那么这种方式呢,就会比之前的啊测试方式更好一些,所以这是我们以后推荐的一种测试方式啊。好的,那么这块呢,说完之后,下面我们就快速使用一下监狱的单元测试啊,那这里面呢,我们试一下就可以了, 这里面说了某个系统啊,有很多的方法,那其实使用今日的单元测试,给代码进行测试啊,完成对这些方法正确性的一个测试,是吧?那么具体步骤呢?就是这就是使用我们单元测试的一个步骤,那么以后呢,不管是针对哪些方法,对吧,还是其他方法进行一个测试,我们都遵循了这几个步骤就可以了, 很简单来看啊,首先第一步呢,我们要把价包导到项目里面去,但这次是不需要我们下载复制粘贴在什么右键点击 带 slivery 这个方式,因为它这里面呢,它会自动关联,他说你需要,对吧?你奥利加回车我就给你选,你是是不是确实需要,你点个确定就好了,或者你选择一下就好了,他就会自动帮你下载,所以一会呢,大家连着外网啊, 要连外网这块呢,他会自动的跟你去连接进行下载,你要连着外网,那么这个时候,否则的话他下载会失败的啊, 这个 id 集成呢,咱们的叫做这个监狱的框架,对吧,不需要手动再去下载访问啊,那么为了为需要测试的业务方法,对吧?的业务类啊,定义对应的测试类,到时候呢,咱们每一个测试啊,每一个被测试的类啊,都会有一个对应的测试类, 因为每一个业务方法呢,提供一个对应的测试方法,那么这里面,而且他这个名字啊,到时候呢是有这个规范的啊,就测试类的名字,测试方法的名字是有 规范,同时呢,这里面的方法还有要求,必须是公共的无餐的无返回值的这种方法才能直接进行一个测试啊,才能变成测试方法啊, 那么在测试方法上加上 and test 注解,然后在设置方法中呢去呃这个编写代码呢,调用被测试的业务方法进行测试啊, 那再来就是啊,开始测试,那么只要去运行起来就好了啊,那么我们通常绿色就是成功啊,如果是红色就是什么样失败啊,这是这几个步骤, 那下面的话呢,我们回到 i 店里面去给大家去演示一下他的一个基本使用,现在我们直接使用了啊,就是这个四个步骤吧。好的,下面我们开始这四个步骤呢,我们回到这边啊,来去写一个我们的新的包和泪啊,在这里面我们 来一个看点, it 黑马点买接 unit 吧,买接 unit 好了之后呢,我们这里面呢,再来一个对应的啊测试的类啊, 这里面呢,我们叫 g u n i t m o e 行不行啊?这就是我们的第一个啊,这个单元测试的一个演示的代码单元什么的测试,说的是建议 unit u n i t 单元测试了,那在这里呢,我们这个呃,还记得步骤吧, 第一步怎么样?是不是要把这个包弄过来,是吧?弄过来,那么这个这个包弄过来的话呢?怎么弄的?这款就是直接怎么弄呢, 对吧?哎,但是这个架包耳机因为不是直接下载的啊,不是直接下载 粘进来的。其实这个步骤呢,你这个打包的第一这个第一步倒的话,其实可以往后稍微放一点啊,可以稍微放一点,其实的话我们可以这么做,先把一个方法上面写出来,所以我们可以先写个方法啊, 这里面的这个步骤啊,其实你先写方法会更好,原因是一会呢我们要提示出来,你得写一个东西他才会提示,对吧?啊,所以这里面的话呢,你可以这个不按他的顺序来,但是他肯定是有这几个步骤的啊,不一定按这几个,按他的第一步第二步这个顺序,但是呢一定要按这个,对,哪个步骤一定会用到的啊, 那我们这里面呢,这就相当于是那个测试类了啊,就是测试类,对吧?那么在这里呢,我们就写方法 pablik wa 的这个方法有个要求啊,必须是 pablik 的形式的无返回值的,没有参数列表的这么一个方法,我们就写好了这么一个方法,对吧?那这里面呢,我们其实可以直接啊来写, 你们算一下秀方法执行了啊。啊?这写个方法,现在这个方法呢,你说右键能运行吗? 你想用行他,你必须在一个测试类中,是吧?现在这个类啊,你没有魅方法,我们原来说你有魅方法类才是测试类,是吧?对,那么现在没有魅方法,他其实是无法测试的,现在呢,除非你用我们现在这个新技术叫做解油腻子啊,我们即使没有魅方法,他也能进行一个测试,怎么做呢? 所以呢,测试方法写好了,这个对应的就是我们哪一步,对应的就是我们这一块的,是不是第二步啊?对吧?第二步,那么接下来第三步,我们就在这上面加一个注解,叫做 at test and it has t e s t。 啊,好,那么加完之后你发现是不是在报错啊?啊?这个注解呢,是解 unit 提供的,但是你解 unit 呢,价包都没倒进来, 是不是他就识别不了啊?他可能就会 jdk 里面去找,那 jdk 里面没有,那么 jdk 没有,他就会找你自己写,没写你自己也没有定义过这样的注解,所以现在呢,他就直接挂掉了啊,那么这块呢,应你是第三方的,你要告诉我是第三方的,所以第三步做完之后,我们其实再回顾他来做第一步会更方便的啊。 好,那么第一步呢,就是我们按二零幺回车,在这里呢,在这一块啊,有个叫做 at, 咱们的简约的四,这还有简约的五版本到哪里啊? clasp pass, 对,我们之前加完价包的时候是不是有个爱的爱的 library? 对,那么那个时候呢,其实他就相当于是在加了这个 claspas 啊。 好了,那么这两个里面你选一个就好了,你看要四版本还是五点七版本,对吧?那这里面你都可以的啊?好,但是现在你得连着什么样外网才行的?因为他在给你下载,听得懂吗?事实上这里面呢,他是用一种叫 memon 的一个 工具啊,去自动帮你去进行下载的,那么 memory 工具呢,在外网阶段我们会进行学习,以后我们所有的架包的导入都是通过 memory 直接去做这个事情的。连着外网之后,现在呢,我们二来家回车, 那么我们选这个是吧,点一下这块呢,其实他就是在给你去下载,看到没有,他其实还是临时下载,所以这里面到底是不是自动集成,这见仁见智,你也该认为他是自动集成的,其实也该认为他没有自动集成,是吧?这玩意的话有自动集成吗? 有,这种集成的,相当于你这个你的 id 里面其实是应该有的玩意,是吧?啊,你这个其实没有,你还是临时去下载的吗?对吧?所以这个道理是不是集成啊,你都可以理解的啊,可以是,也可以不是,我认为不是啊,那么这里面呢,只是说提供一个快捷键,让你快速去下载我们的节约旅程,那这里面呢,是从 miman 仓库里面进行下载,所以 就会用到一个 melon 的这么一个技术啊,好,那么这里面呢,我们只要点一个什么呀? ok 是不是就行了?对哎,点一个 ok 就行了啊。好的,我们这里面点 ok, 那么稍等会儿,你等着下载啊,下载完了之后,那么这个时候呢,他就给你去自动的导入, 你看是不是还有还有一点时间呢你,你下载啊,好,这就完成了是吧?完成了,稍等会是不是就好了? 那么这里面呢,如果你是五版本的话,五点几版本的话,他可能用的是这个,是吧?啊?这么一个,那到底能不能行?那我们试一下看啊, 这里面是不是你发现这里是多了一个这种绿色的箭头啊,其实引起你进行乱,对吧?所以你到时候乱的时候呢,有这么多方式,第一种呢就点这里,第二种当然你在放方法范围内啊,点右键也是可以乱起来的,你看这秀发是 自动断的,我们点一下,随便点这个还是右键都是行的啊。 那么这里面呢,乱完之后来看效果啊,在控制台是不是重新打开窗口啊?哎,你会发现这是绿条是吧?来告诉您效果方法怎么样?执行了啊,那这里面是不是就把这个方法给他运行起来了,而且是正常运行,是吧?正常运行,那么如果这里面呢,不小心写一个问题, shot 一下三除以零 这块是不是会出异常,会挂掉,那么这个时候呢,我们来再运行一次,那如果另哪面出现问题啊,这个时候呢,就可以给你去报啊,咱们的红色的啊,提示你看到是不是红色感叹号,告诉你是不是方法出错了呀,说你这里面出现了,出了一 长了,是吧?出现了问题,所以呢,下次你快速测试的时候,看到这个红色的,是不是代表你测试里面出现有一些问题啊?绿条,哎,说明你是测试正确了啊。好,那么就是这种情况,那下面呢,咱们继续看啊,这个方法呢,咱们是有很大的要求的, 就是这里面呢,必须是 public 的形式,必须是无法维持的,必须是无参的,而且必须是非静态的,你不能是静态,所以这里都有要求啊,不信你试一下。比如说把这个修饰幅改成 p l t c t e d, 是吧? protected 啊,你来右键运行一下看。 刚才这里面的这个东西我得给先干掉,是吧,来试一下看啊。嗯,我们这个能不能行啊,试一下啊, 我们这个是五版本的,是吧?嗯,五版本的我看一下有没有什么差别啊。五版本的我们改成 protein 先试一下啊。 嗯,哎,五版本的好像做了一些改变,是吧?这个帕布里可能可以用,这个好用,普的泰迪可以改啊,我们再试一下返回值吧,行不行?四版本应该是不可以啊,那么我们试一下啊,你添个十,看下这个允不允许啊。 那四版本是不可以的啊。那我刚刚 ppt 里其实你也看到了,人家这个是说的有要求的啊,来再试一下看。 你看这个时候他好像也不给你报其他错误,他直接告诉你这个就没有这个方法被找到,是吧。嗯,他给你报这个错了,所以四版本跟五版本还是有一些差别啊有一些差别啊,那么这里面呢,这个可以了,我们就用这个也行啊,要不我把它换回到 四吧,行不行?五咱们一会再来用,行不行?换个四四,还是我们一般用的四比较多一些。嗯,这里面呢,我们怎么去解除掉啊?可以点这个 fire 项目结构在这里面呢,我们找到第十八的这个模块在这里啊,你会发现这五吧已经给你自动放到这里了。 哎,你点到对十八的模块,再点咱们这个 dependency 叫依赖,其实就是价包啊,你把它给删掉就行了。在这里呢,我们怎么去删掉啊?这里面有个减减号,就是删,删除掉之后点点 pray, ok, 点完之后你发现这个是在用的时候就挂掉了,对不对?哎,就挂掉了。好了,我来去给你用个四来试一下啊。 来 test, 咱们二加什么呀?回车来加个四吧。这连依然还连着外网啊,我们进行一个下载,刚刚呢,我们在读 ppt 的时候,你可以看一下,这里面是不是有要求啊?你看第二 点,这个方法必须是公共的,无餐的,无返回值的方法。好的,我们用这个方法来,你可以看到这里面自动已经倒了,是吧?那么现在我们来试一下。我们先试 protiti 的情况是吧?这个不要了,右键按点秀方法,我们来试一下。这次太阳没问题啊, 正常来说他不符合,他应该给你控制才报错啊,不是说这个方法找不到或者不给你运行,这时候呢,是不是就出错了?他说你这个是什么呀?这个,这个方法是什么无效的方法啊?哎,这类中有个无效的方法,这个方法呢,应该是 hubric, 对吧?应该为什么呀? hubric 啊,所以这一款呢,你看的更清楚了。那这里面反过来重新来个印子,这里面来个 read, 看个十的话,你现在再来试一下,看 有两个值的方法。那么这一块呢,他是不是告诉你应该为什么呀? word 是吧。那么这个参数列表,这个我就不去试了啊,那么参数列表也必须是空参的,哎,这是有这个要求。好的,这点我们说完,说完之后,接下来呢,我们继续看在一个测试类中能不能搞定个方法, 可以吧?来,我们拍了一个 word method, 是吧?还可以继续搞一个方法,那么继续搞个方法之后呢,我这里面可以设备一下这个 method 的方法,是吧?方法执行了是吧?好,那么这个方法呢?执行了之后,现在呢,我们这里面你想到真正能执行的话,你是不是得加 at test? 注解, 说白就是你现在的想让某一个方法运行起来,你就要在每一个方法上面加某一个方法上面加上什么? ittys, 每一个都单独是这么加。那现在可以做到单独运行啊,你不想运行他,你想运行他的话,哎,可以啊,你只要在这个范围内点右加 或者点它前面的这个绿色箭头,这就可以做到啊,只运行一个方法,现在呢,我只运行了啊,咱们的 master 的方法就没有运行效果方法了啊。来我们看下效果,你看是 master 的方法执行的,如果想让所有的方法都执行怎么办呢? 你就在方法之外类的范围内去点这个右键,那这时候你发现他会运行整个类才把它运行起来,那么这里面的所有的方法他都给你运行起来了,你看是不运行起来了。好的,那么这就是我们杰瑞的来源测试的一个基本使用,你说有难度没有? 没有吧,你就写一个符合要求规范的这种测试方法,然后呢,在上面扛一个注解, attest 扛的位置别放错了,扛的是类方法的。什么呀?上面,然后呢,然后你就可以 右键运行是吧?可能扛得住解的话,前提是你要把这个价包先给他下载下来啊,通过我们的 men id 自带的 men 是吧,帮你去下载。那么在这里呢,我们下完之后以后你就不需要了吧,每一次在用的时候是不是直接用就够了? 哎,就可以直接使用了啊?好的,行,那么这就是这么一个,呃,单人测试的一个基本使用啊。好的,那么这块呢,我们单人测试概述以及简约的单人测试的基本使用,我们就说完啊,说完之后呢,回到我们 ppt 里面来啊, 在这里面我们简单总结一下是吧,来找个同学来回答一下吧,我们一起看一下啊,大家一起回顾一下行不行啊?什么是单元测试啊?这个东西啊,你能描述清楚,我们下个同学呢, 那你自己理解,咱们直接描述就可以了啊。 啊,对一个方法进行单独的测试是吧,而且对每一个你想测试的方法都可以单独测试,当然呢,每一个的话你要注意了,就是目前为止我们如果是直接单独测试的话,那其实要求方法是不是 public white 和什么呀?无返回值是吧? 但事实上你说的对每一个方法测试实际其实没有问题的那些东西说,那如有一个方法有参数列表怎么样呢?如果一个方法是有反馈值,那能不能测呢? 这个呢,其实他不能直接测,但是他可以间接测啊,所以呢,其实说啊,你说对每一个方法可以测试,那其实是对的啊,虽然不能直接测,但能间接测,一会我们会演示。 好的,那么这个单元测试其实就是对代码进行测试,而且可以针对我们最小的单元,就是功能单元就是方法,就是进行单独的测试啊。好,那么这单元测试概念啊,继续我们说下面的吧,使用简约的框架单元测试有什么优点?有什么好处啊? 按之前没方法的好处来说更加灵活是吧?就是更加灵活。确实啊,更加灵活,你想选择哪个测试就测试哪一个是吧,你不需要去修改代码呢,你直接点哪个范围内是吧?对某个方法进行测试就行了。好的,那么这个还有什么优点没有? 它可以生成测试的什么呀?报告是吧,或者让你比较容易的看到你的测试的结果啊,到底是什么?一个正确还是失失败的一个结果是吧?好,很好,请坐。 那么如何对如何使用简易的框架对方法进行测试?里面是不是我们说了有四个步骤是吧?那么下一个同学轮到谁了?我们回答一下简易的框架使用的这四个步骤。 这个方法,对,然后呢啊,这个方法有要求是吧?公共的无参无法规值的啊。好了,然后第二第二步呢? 导入价包是吧?然后第第三步呢啊,直接测试是吧?那 air test 注解别忘了加吧是吧?啊,你在方法上面加 air test 注解,然后呢,你右键就可以进行测试是吧?啊,很好,请坐。那么我们单元测试呢,就这点内容是吧?好的,当然他把这个呢放在下面了啊, 等一下一些解释放在下面做什么啊?就是对他的正确性测试有什么优点?他是这边重新搞了一个啊,那么这个呢,这个可以很灵活,你可以测试某个方法,某些方法也能一键测试所有方法,而且呢,你在测试的时候不需要注视掉一个方法,对吧?然后呢,怎么怎么样啊?你这块呢,想测试哪个选哪个就完了,还能上身测试 报告,呃,正确的就是绿色,室外就是红色,是吧?然后呢,室外了之后呢,不会影响其他方法的测试, 这个实现过程就是他的步骤了啊。好的,这里面呢,我们这个测试某个方法测试全部方法怎么处理,成功的标记是什么,是吧?这里面说来说去,这个 ppt 里面好像搞了一些重复的东西在里面,是吧? 都是右键好了,立条表示成功,对吧?红色表示失败。好了,行了,那么到此为止呢,我们的简约 it 第一个内容就是 他的概数以及简约的单元测试的一个基本使用,我们就说完。好了,我们下一个内容呢,要去看他的一些常见注解,除除了我们刚看到 x 注解之外,其实他还有其他的一些常见的注解啊。好了,到此为止呢,我们这个内容先结束啊。

介绍了一下这优乐的单元测试中测试的一个分类,分为黑盒测试,白盒测试, 那么我们也知道了这优力特这个单元测试,他是白河测试,能理解是吧?那么下来呢,我们就来用一用这个这优力特来完成一个简单的测试案例来编写, 那么这个地方呢,我们先来写一个普通的代码,我们之前看一下我们怎么测试的,那么在这个地方我们创建一个包,在这呢我们创建了一个模块,那么在这模块中呢,我们起了个名,叫做对零一,是一个基础加强写的中文,那么这个地方为了方便各位后期去 找这个代码,所以呢我们起成中文名了,当然建议你后期在自己写的时候不写中文啊,我们在这个地方写一个包,写一个包,创建一个包,你有一个拍 k, c, n, d, i, t, past 第二 unit, 好,这 unit, 那么在这里边呢,我们写一个类,写一个普通的类,比如说我们写个计算器的类,里边定一些方法,开 q a, t 啊,开 q 类特计算器的类,那么这个计算器类呢?我们写个注视啊,注视就是计算器类, 那么里边可能有加减乘除一些方法,对吧?我们在里边定义两个方法,一个加法,一个减法,第一个加法夸不累,可加法呢?印的艾的,我们就定两个参数,印的 a, 印的 b, 好,写完了之后呢,我们在这里边 reany 阿姨阿姨 turnerna 加 b 即可。 写完了之后这就是一个加法啊,加法,那么我们把这个代码呢,我们复制一份吧,再写个减法,减法呢,这个地方我们叫做扫把返回啥呢? a 减 b, 完事了吧?好,这是 减法。好,这个类非常简单,写完了里边两方法一加一减,那么现在我想对这个类啊,去测试一下,我看这个类写的对不对,对吧,在用这个计算器类之前先测试,那么测试呢,我们一般起名就是看 q letitist 啊,这个名字 写完了之后,我们写一个闷方法, psvm 以前是不是这样写的?然后呢,我们去干事,就是去创建创建这个对象,然后呢,调用方法,完事了吧,以前是这样做的吗? 创建对象呢,我们就开 q like c a k q atec 等于六一个 a, 六一个开 q a t。 好,六完了之后,那么下来我们就可以调方法了。 c 点什么爱的好,传个一,传个二,传完了之后,我们返回一个结果啊,延 s u l t redot, 然后呢,我们打印一下 sout, 打印一下这个 redout, 是吧,以前是不是都这样做的?然后呢,运行一下这个代码,看一下结果是否正确,对不对? 那么我们来瞧一瞧这个结果是否是正确的哈,那么来看一下三,一加二是不是三啊?就是三,说明对了,那我现在要测试减法,怎么办呢?那简单,把它注视了,对吧?注视了,哎,多出了多注视了一个括号, 好,把这个选中,给他注释了。注释了之后呢,我们来 c 点萨吧啊,减法一,比如说逗号一,好吧,一减一,一减一呢,结果是零啊, es 啊, esult 游游 u l t 好,减法也有了, sout, 把这个蕊字 out 打印一下来运行一下,看一下是不是零。 正在运行啊,好,您没问题吧?我这个地方是用的快捷键在运行,那么这两个弄完了之后呢,我们的测试也写完了,发现,哎,这个类呢,定义的还是没有问题的,那么之前我们是这样做的,但是这样做呢,有一些很多的缺点。第一个缺点, 这个代码是不是要注释了,对吧?一个闷方法,嗯,只能运行,只能去测一个方法,然后呢,我要测另外的方法,我还要把它注释了,以免产生一些影响, 是这样的吧,很不方便,写代码不方便,而且呢,我这个测试代码呢,还得放跟这个代码放到一块, 是吧?也不方便,反正能不方便去管统一管理我的测试代码,反正呢,有很多的缺点,而且呢,一个类里边只能写一个闷方法,是不是都很不方便?所以呢,现在我们学了单人测试,我们就不要这样去 写测试类了,我们学了单元测试之后,我们怎么做?我们来说一下他的一个使用的一个步骤,好,使用步骤,第一步, 第一步,第一步呢,你要去定义一个测试类啊,测试类,测试类啊,测试类,我们一般有时候也称为测试用力啊,就测试类, ok 吧。第一个测试类,反正用个类就可以了,而且呢,建议啊,建议,建议,这个地方说一下, 建议这样做,建议有两个建议,第一个,第一个建议类名,这个测试类的名,测试类名叫做你被测试的类名,后边加个 pass, 能懂这意思?比如说你现在有个累,叫做 ctrl like, 然后你咋写啊?叫做 call kiki killl like, 太死他就这样写,太死他好,建议这样写,这是第一个事。第二个事,包名好,这个测试类的包包包叫啥呢?包一般我们放到什么?什么 叉叉叉底叉叉叉底叉叉叉,一般叫做 past 底,最后结尾是 past 包好, past 包,比如说我们是 cndit past, 然后 dirtys 好,最后放到这个包里边,建议这样做哈,这是比较符合我们编码的一些规则规范。 好,定义完测试类之后呢?第二个你要去第一,第一测试方法,第一测试方法好,那么这个测试方法将来是可以去独立执行的,独立独立运行,将来这个方法我们通过一系列的操作之后,让他可以独立 运行。那么这个方法现在我们也有一些建议啊,也就是建议有两个建议,那么第一个方法无外乎就是起名和返回值,还有参参数列表这些问题吧。那么建议呢?第一个建议,这个方法名要注意 我们测试哪个方法就写,比如说我们写 past, 后边跟的是你测试的方法名,比如说有个方法叫艾特,我们咋写呢?就是 past i 这样写 来理解这意思好,我们有个减法,那就是 fast 是不是这样写?那么第二个问题,建议返回值, 返回值测试方法的返回值建议使用 y 的,没有返回值,因为这个方法你要独立运行,运行了之后你看结果就行了,要返回之干嘛?又没人调用他,对不对?你自己又不调用他,那么这是第二 第三个呢?参数列表好,列表建议空猜 好,建议空餐,因为这个方法独立运行的,你又不调用他,给他传餐,没有必要建议空餐, ok 吧。好了,这三个事说一下, 那么第三步,第三步就是最关键的一步了,那你随便定一个方法,你能让他独立运行吗?啊?当然不能,对不对?你方法怎么能独立运行吗?你要借助于闷方法,闷方法才是程序的入口吗? 那你要一场让一个测试方法能独立运行,你需要干一件事,给这个方法去加一个注解。加什么注解呢?这个注解叫 junit 啊, fast 里边有一个注解叫做 past 注解,艾特 tst, 加上这个方法就能够独立运行了,就这么三步,简单吧,简单是吧?那么来写一下, 首先呢,我们去第一一个包,在这里边再弄一个包,弄一个 plus 字包,叫做 tist 包,好, tst 包, 你看两个包是不是平级的,那么下边呢,我们写一个类的名字,这个名字是不是就就这个名加 fast 就可以了?好,你有一个 clus, 好,他加上 fast。 好,建议这样写啊, 那么这就是我们的一个单元测试的类,那么写完了之后呢,我们定一个方法,比如说我们在这加个注视,我们说是测试,测试爱的方法。 方法,那么咋第一呢,就写帕布雷克 red tist id 完事了吧, 完事了之后,接下来我们要让这个方法能够独立运行,咋办呢?我们在这加个艾特 past, 注意 past 好,加上,加上之后你就发现呀,报错了是吧?我 不加,你看我不加,我这个代码还没有问题,我一加上我就整个程序报错了。为啥报错了?是因为现在你的工程里边并没有去导入 zunit 的依赖,所以呢,你需要干一件事。 第四步,需要去导入这个 zunitunit 的一个依赖环境啊,怎么导入呢?这个地方非常简单,这是不是有个小灯泡啊,你点一下,注意看啊,说添加 zui 的四到你的克拉斯 pass 类路记下边点一下, ok 就完事了, 简单吧,是不是就这么简单?好,写完了之后呢,我们先来看一下,我们在 sout 看这个方法能不能执行,说我,我被执行了,好,你注意,现在我们来运行这个方法,看是不是有箭头啊,点一下软, 这个地方运行的时候呢,就可以这样去运行,走来看一下,稍等。 好,你看这个地方输出有没有问题,这没有任何的问题。 ok, 那么接下来我们就可以来完成这个测试了。怎么测试呢?这个地方我们就可以去干嘛呀?是不是创建对象啊?我们去创建创建这个计算器对象。好, 好,然后呢,第二步是不是调用他的方法呀?调用爱的方法啊,方法。那么怎么办呢?我们在这写一下 kit ulit, 对吧? c 等于六一个 kikulit, 然后呢, c 点爱的传个一,传个二,没问题, 对吧?返回一个 r e, s, u, l t redot, 然后呢? sut, 对吧?我们打印一下 redot, 好,弄完了之后呢,我们来运行一下,来瞧一瞧这个代码,结果是不是三 十三吧,没有问题,程序运行成功。那么这个地方说完了,说完了之后呢,我们还要说另外一个事,这个事呢,就是说,比如说这个太子的方法,你现在运行成功了,他是绿颜色,你看这个地方是不是都是绿颜色的,都是绿的吧,绿颜色,绿颜色代表 ok 成功了, 那么如果他变成红色了,说明你这个程序可能有异常,那比如说我们在这里边呢写一个异常,对吧?我们就递一个异常,手造一个异常, ent i 等于三除零够异常了吧?零被除了,对吧? 不能这样去写,所以呢这个地方一定会抛出一个数学异常,那么在这我们来再运行,你注意看啊,他会变成红颜色 来再运行走,你注意看,现在来看,你看是不是就红了,你看是不是都变成红色的,说什么摆子要有数学异常, 那么这个地方你要知道将来我们其实呢使用这一用力的时候,你要注意的是啥呢?要注意使用这一用力的时候,我们看的不是输出的结果,一般我们看的是红色还是绿色,如果是红色 表示测试失败,如果是绿色表示测试成功。将来一些后期的我们学的一些测试框架也会这样去判断的。如果你光说输出的话,你根本就输出,根本 本就不会看出来他是正确与否,那么输出这个地方我们只能是肉眼来看,并不能通过程序去判断,如果是红色还是绿色,我们是不可以通过程序去判断的。当然这个事呢,后期我们了解一些测试框架,我们会再给大家说的。 那么现在呢,我们说这个地方怎么来去做这个事情,那么看好我把这个,这个这个注视了, 我们先在笔记上记录一下,笔记上记录一下这应用车的使用步骤,知道了第四步,我们去判定一个结果。怎么去判定结果呢?判定结果,那么结果的判定是, 嗯,黑色,红色,红色代表啥呢?代表成功,然后呢绿色代表,哎,红色代表失败啊,失败,绿色代表成功, ok 吧?好,知道那个结果的判定。 之后呢,我们先把这个注释呢?把这个这个玩意给他注释掉,注释掉之后呢,我们来说,现在呢,我把它改成减号,相当于我在写爱的方法的时候写错了,能理解吧?写错了之后呢,我们在这个地方,在这个地方我再来执行他,注意我再执行他。红的还是绿的? 红红的,绿的吗?对吧?你看是不是绿的,绿的说明啥?成功了,但是结果是我想要的吗?我一加二成了,负一了, 不是我想要的,所以呢,输出经常我们看不出来,或者说并不能得到我们想要的结论或者结果, 那怎么办呢?一般情况下我们不会在单元测试里边去输出,我们会做一件操作,叫做断言的操作。断言什么意思呢?就是我断言这个 结果是三,那么会怎么办呢?他会把我断言的结果是三和真正的结果去比,如果两个是一样的, 那就是绿颜色,如果不一样呢?断言失败了,那肯定你程序里边有八个才会失败,是不是这意思?所以呢,我们可以怎么做断言,那么断言呢?叫做 start 尔斯尔特,那么俄斯尔特呢?有一个类叫做 ass e r t 俄斯尔特,那么里边有个静态方法,有一大堆俄斯尔特依扣,那么是俄斯特尔瑞依扣,人数组是否相等, 然后你看是不是有一大堆的方法,那么我们用这个耳塞一扣就行了,他有一大堆的虫仔形式啊。那么我们里边传两个硬的性的纸有没有啊?肯定是有的哈,那么浪是不是可以接收硬的性的纸啊?能理解,是吧?那么我们在这里边 传两个值,那么注意看这个参数,那么这个地方一个是你期望的值,一个是真实的值哈,我们来看一下这个方法,你看一个是 expark 的,一个是真实的值,你期望啥呢?我期望是三,真实的值啥呢?真实的值是蕊造的,能理解,那么现在我期望是三, 真实是不是三我不知道,那么我们来看哈,再来运行,注意走,你注意断言, 断言完事了之后呢?现在我知道我写错了,那么是不是就报错了,你看这个地方是不是这这红色的了,是吧?断言失败了,说说这个结果在哪呢?他有没有一个提示啊?说期望是三, 但是呢,你给了个值呢?是负一,是不是就断言失败了,这个程序整体是不是就废了?挠他一口就不不想等了, 对吧?所以呢,这样去做比较符合我们测试的一个目的,那么这个地方要注意断盐的操作, 所以呢,这个地方要说一下第三个事,我们要说一下,一般,一般我们会使用断盐 操作来来处理这个结果。好,那么断言怎么断言呢?你自己去看一下这个东西就可以了。好,呃, sir, 这么一个东西,那么这个地方是一个期望的结果,然后呢,这个呢,就是我们程序运算的结果, 是运算的结果,他会去拿着运算的结果和期望的结果去比对,调用这个耳塞的依扣方法比对两个是不是一样。好,这是一个操作,那么当然啊,我们这个单元测试呢,我们可以测试爱的方法,当然,你是不是还可以再 再来测试啊?测试啥呢?你可以再写一个吗?啊?帕布雷克 red 泰斯特萨布 是不还可以测试?萨布就是减法,对吧?那同理啊,加上一个 past, 那么你看现在这样写是不是很方便?那么比如说,我们再来创建对象,复制一份,然后呢,调用他的 c 点萨布, ok 吧?然后呢,一一逗号二,好,然后呢,返回一个啊, es 由 l t 没问题吧?然后第三步,我们断言一下, a s s e r t 好,那么一二一减,我期望是负一,真实的结果呢?哎,少掉方法啊。呃, sir 的 a s s e 二 t 一口好 一口没问题,是吧?然后期望是负一亿,返回的是 redot, 然后呢,我们来执行一下,期望 是负一返回呢?不知道是不是负一,是绿的就通过,是红的就失败,对吧?我们来看一下最终的结果是不是绿的呀?好,绿的就欧了吗?不需要输出的对吧?好嘞,那么对于单元测试基本的一个使用,我们就在这个地方讲解完毕了。

介绍了一下这优乐特单元测试的基本使用步骤之后呢,那么接下来还有一个小知识点,我们要来说一说, 那么一般情况下呢,我们在执行测试程序的时候,有很多代码都是一些重复的操作,比如说我们要去操 操作一些 io 的程序,我们刚开始要申请资源,最后要处理释放,释放资源,对吧?那么实际上这样很重复的操作我们怎么来完成呢?我们在这里边有两个注解,来说一下这两个注解呢,一个是 bfo, 一个是阿福特, 那么比如说我们再写个代码 party 的引力的方法, n i t 引力的,那么这个方法是初始化方法。好,初始化方法,初初始化方法,那么这个方法有什么特点呢? 这个方法一般呢是用于用于一些资源的申请,资源的一些申请啊,申请,请 申请,也就是说所有测试方法单元测试所有的这些方法,然后呢,在执行之前都会先执行该方法,就这个意思, ok 吧,那么我们怎么让这个方法成为一个初始化的一个方法?或者说怎么样这个方法在所有测试方法执行之前都执行这个方法呢?我们加一个笔否 艾特比 fob f o r e 比否这么一个注解就可以了。好,加上就 ok 了。那么加上之后呢,我们在这打印一下说,嗯, i n i t 点点点, ok 吧,证明这个方法被执行了,能懂。那么桶里啊,还有一个方法叫做再定一个方法,叫做 padplack p o b l i c paplagy 的叫做叫做可漏子 close, 好,可漏子方法,这个方法来干嘛的呢?这个方法呢,就是一个释放资源的方法,比如说释放资源的一个方法,那么这个方法呢,用于 他在在所有测试方法执行完好,执行完后都会都会自动执行, 自动执行该方法,那怎么办呢?我们就可以给他加个注释,加个 ft a f t e r ft 这个注册,那么加完了之后呢,我们再来 s o ut, 好, s 这个地方叫做 c l o s e c l o s e。 好,完事了吧?完事了之后我们随便演示一下,比如说我们现在找个方法执行一下,比如就这个方法,那么这个方法呢,我们在这个里边去 sut 打印一下,打印一下 past, 为了看一个效果,所以我们打印一下泰斯特萨普方法被执行了,能理解吧?好,打印执行,走来看 看一下是不是我们说的这个样子,应该是不是先执行隐匿的,再执行太死的萨布,最后执行可漏子呀? ok 啊,那么我们可以再这样,我们可以在这个方法里边也可以来执行一下,叫做 叫做啥呢?叫做 sout, 也打印一下,打印一下泰斯特爱的点点好点点。然后呢,我们也来执行一下,绕一下,绕完了之后注意 看结果,看结果,那么他是不是报错了呀?报错了之后呢,我们来看打印有没有啊?你看打印是不是该打印还是打印啊?虽然这个方法报错了,但是这个方法呢,打印肯定是有的,因为是第一行,是在这一行里边才会报错的,所以呢,第一行已经执行过了,输出已经有了, 然后呢,虽然这个方法报错了,但是该释放资源你还是得释放,对吧?所以呢,即使这个方法出现的异常,可漏的方法仍然会被执行。 那这就是两个注解,一个是比否,一个是阿福特,一般呢,比否用于一些资源的申请,嗯,然后呢,阿特用一些资源的释放指导一下这么一个操作,这两个注解也在笔记上去记录一下。 然后呢,有两个注解啊,呃,补充补充一下,补充一下,这么两个东西,一个呢是艾特笔缝, 艾特 b e f o r e。 好, b e f o r e。 那么这个是比凤,然后还有一个呢是艾特 a f 提亚阿斯特,那么比凤呢?他修饰 修饰的方法会在会在嗯,测试方法之前 被执行,被自动执行,那么同理 f t 呢?修饰的方法会在测试方法执行之后自动被执行, ok 吧,不论这两个方法测试方法是否会出异常,这两个方法总是会成型的。那么对于单元测试,我们就讲解到这个地方。

接下来我们来学习第一块内容,这 urit 单元测试,那么要说这个测试,那么首先呢,我们就先聊一聊啥是测试, 那么其实测试很好理解啊,我们写完了代码之后,是不是要对他进行一个测试一下,看他写的是否正确,是不是能够达到我们预期所期望的一个效果呀?那么我们简单的介绍一下在软件行业里边一些测试的一些分类, 那么从大的层面来说,他其实就分为两类啊,第一类呢叫做黑核,黑核测试,然后,哎测试测试,第二类呢叫做白核测试, 那么这个黑盒白盒什么意思?我们来画个图来讲解一下,在这画个图,比如说呀,现在你有一个程序,对吧?这就是你的程序, 那么你程序里边呢?有好多行代码能理解吧?好多代码是不是依次去这样执行,执行能理解这意思好,那么我们简单的画一下,就这么一个意思, 那么我们把这个事呢,我们给他复制一份备份,一份好,两份,那么一个代表黑盒,一个代表白盒来理解吧,比如说这就是我们所说的黑盒来测这个代码,黑盒好,这个呢是白盒,白盒, 那么黑盒怎么测呢?黑盒就相当于拿了一块布,好,拿了一块布,嗯,把这个盒子把这个代码呢给他包裹起来了, 你看不到这个代码具体长啥样了,看不到了,那么拿了一块黑颜色的布,我们把它遮住了,比如说把它遮住了,好,全遮住了,看不到了吧?看不到了之后呢, 我们只期望只需要给他这个盒子里边,或者说给这个代码传入或者输入一些参数,然后呢我们看这个盒子能不能够,或者个代码能不能够给我们输出我们预期的结果,这个地方我们称为 inpot 啊, inpt 英普特,然后这个地方我们称为奥特普特,我们给他输入一点值,经过这个代码的运转或者执行之后,我们看一下输出是否达到我们的预期,如果达到了,那么这个代码就没问题,如果没达到呢?有问题呗,对吧? 所以呢,黑核测试是不是非常的简单?是不是非常简单,你不用关注具体的实现逻辑吧?好,这是黑核测试。那么再来说一下白核测试,白核测试是这样的,他也需要一些输入,也需要一些输出, 好在这个地方呢,他也需要一个输入,没问题吧?然后呢他也需要一点输出,但是呢,这个地方这个盒子你是能看得到的,或者说输入了之后,这个参数进来了之后,在这个代码怎么去执行的? 然后呢每一行具体逻辑是啥?考虑里边这个算法写的是否的严谨,对不对?效率是否高,性能是否好,然后 输出是否达到我们的期望,主要的区别就是白盒,你要去关注这个程序执行的具体的一个过程和流程,那么白盒测试一般情况下需要我们去写代码,而黑盒测试是不 不需要写代码的,黑盒测试一般就是点点点,现在呢,市面上很多的测试人员都是黑盒测试,如果将来各位即使你 要去从事一些测试的工作,我也期望你是白核测试能写一些代码,那么这个地方简单的来说,黑核测试 是不是不需要写代码,然后呢?指定或者说给输入值, 然后呢?看程序程序是否能够能够输出输出期望的值, 对吧?那么白河测试呢,是需要我们写代码的,然后呢我们需要去关注这个代码, 代码具体的一个代码啊,或者说程序,程序具体的执行流程好需要干这个事,而白河测试更有技术含量一些,而我们的 j unt 单元测试 是干嘛的呢?其实呢,它就是白核测试中的一种啊,这优乐的单元测试就是白核测试中的一种,那么接下来我们就来说一下这个单元测试 这 unit, 这 unit 如何去使用, ok 吧,那么我们对测试做了一个分类,分类,那么这个分类呢?我们先在这暂停一下。

好了,那么下一道,下一道是什么呢啊,这个呢,略微的复杂那么一点点啊,说在 e 克利斯中创建,这还意克利斯呢,应该是用 id 哈,建立在二人营程序,然后输入身份证号或准稿证号,可以查询到学生的基本信息。什么意思呢? 程序运行呢?首先让我们说,请选择您要输入的类型,如果选择 a, 那就是按准考证号查询,如果录入是 b, 那就按身份证号查询,如果选择 c, 那就是您的输入有误,请重新输入。 听懂吧,就是按两种方式查呗。如果选择 a, 那就是按准好证号查询,我们输入准考证号,他能查到的话,把查询结果给我显示在这啊,如果你选择 a, 要是查询不到的话,那就查无此人,请重新进入 程序。就这意思看到吧,其实说白了就是查询吗?当然让。首先什么让我们选择类型啊,按照什么去查吧,我们先把这个给他构建出来, ok, 搞一个 tis 的二。那么首先呢,我们还是要有死干的,这是肯定的,是不是也得从键盘接收啊?嗯, s e a, 嗯,一二,死干的,咱们离这个命的控制台的数据接收啊,马上就就要结束了啊,马上咱们就学前端页面了。 然后呢,这时呢,首先给用户一个友好的提示,提示什么东西呢?叫做请选择您要输入的 类型,是这吧,然后 a 准考证号, b 身份证号, ok, 叫做请选择您要输入的类型。有没有冒号?有。然后呢,在 c 上 照他一下叫做 a, 代表准考证号,然后呢,再 c 照他一下, c 照他一下叫,哎, c 斯 out 一下,然后 b 呢,是按照身份证号,紧接着我是不是要接收键盘进入用户选择的是 a 还是 b 呀?哎,那么就 se, 对吧? a 和 b, 其实我是不是要个叉就可以了,我们就来个叉,艾特零得到的是一个叉型的,比如说是 k, 然后拿到这个 k, 我们是不是利用 sways 去判断 到底是 a 还是 b 还是其他的,对吧?哎,判断这个 k, 说,如果你是 a, 那么我们就怎么样呢?按准考 正号查询,然后 break, 很有意思吧?说,如果是 b 呢,那么我们就要按身份证号查询,然后 break, 那么其他的,那是不是就抵否的呀?抵否的,其他的话,那就是您的您的输入有误,然后让我请重新进入程序吧。哎,你得重新执行。哎, 请重新进入程序啊,当然我们也可以说啊,请重新输入也行,那无非是不就是循环呢?下一道练习,那就是请重新 输入啊。哎,就可以用循环了。习惯上这里我是不是也加个宝瑞 k 啊?那完事,对吧?完事我们可以先去跑一跑,试试看我们这个,呃,行不行,对吧?我们选择一个 c a, 看看效果吧。 c, 那就是您的输入有误,请重新进入程序。当然选择 a 的话呢, 我们也测试一下 a, 这里啥都没有,是不是没啥问题啊?右键运行,当然我们是不是习惯上测试啊,让错误最小化。选 a, 那就按准考证号查询,我只需要一会把这个功能按准考证号查,是不是就可以了呀? ok, 来吧, 那就查,按准考证号查询的话,那也没啥特别的。那首先我们是不是得接收用户输入的准考证号啊?说如果选 a 到准考证里,那就请输入准考证号,然后接收一个准考证号, 听懂吧。嗯,那么就给用户一个友好的提示,叫做 c s out, 叫请输入准考证号。 有没有冒号?有,这不得按照需求来吗?对吧?需求上有冒号,咱们就有冒号。然后紧接着我们是不是就接受一个准考证号啊?利用斯甘德点 nice 接收一个准考证号,准考证号叫一个赞哈的。那接下来我就利用这个准考证号是不是进行查询即可了。那么通用的查询,咱们在卖快锐单的工具类当中是不是写好了一个 就叫做快瑞方法呀,专门用于查单个对象的吧。哎,那么此时我们就要查了, 要查的话,那通过 q r 点快瑞。首先第一个他是不是要一个 circle 啊?那就是 jin circle, 来个 slex, 嗯,都有啥来着啊?我们查 他的话都得查出来,是吧?有一个 flow id, 泰帕 id card, exam card, student, 内幕 location 和 green。 那么此时大家注意了查询, 我是不是查询出来这些散劣的数据我们不方便管理啊,我们是不是得把这些散劣的数据封装进对象,然后面对那一个对象? 因此我们需要利用 o r m 对象关系映射这种思想,先把这个数据表对, 对应着我们渣玩中的一个类数据表中的一个字段对应着我们渣玩中的一个属性,那么相应的数据表中的一条数据对应我们渣玩中的一个对 对象 o r m 叫做对象关系映射思想。所以说我们得先去见 一个是丢的,看懂吧。然后呢,根据他的这个数据表中的这个字段呢,我们去创建对应的属性,那么问题来了, 之前是不是反复给大家强调啊,我们要让结果级的这个,呃,名称是不是得跟属性名称一致啊?但是发现表中的这个列名跟我们扎腕的命名规范是不完全不一样,所以说此时大家注意,我们一定要按照我们扎腕的命名规范, 听懂吧。第一个 int, 那我们就用 inter 汁包装类,对吧?叫做 flow flow id, flow flow id, 对吧,这才是咱们扎腕中的命名规范吧。属性第一个单词首字母小写,后续单词首字母再大写。注意啊,咱们是扎腕成全,必须 去按照这玩的命名规范,因为这呢,他叫大写的泰巴,我们叫泰巴,然后紧接着呢是俊的 id card 子俊的,这 id 看的 id 应该是个单词的缩写吧,那就 id 吧,好不好,要不然小写的 i 不好看呢, 对吧?啊,不太好看。下一个,下一个叫 s 俊的,一个詹姆 car 的,然后再来一个 s 俊的,叫斯丢的的内姆,再来一个是俊的,叫 location, 然后再来一个叫 integer 的 g l a d green, ok, 然后紧接着构造器习惯上来一个午餐的,习惯上再来一个全餐的,然后呢,再来一个对应的盖他赛他方 方法以及习惯上再来一个秃子俊方法。当然秃子俊方法是不是你可以按照你自己喜欢的格式拼成你喜欢的样式啊,咱们就默认的就可以了。 ok, 那这个就有了,有了以后, 那我就可以查了,查了之后呢,这叫粉漏 id 对吧?但是大家千万切记,昨天反复给大家强调的一点, 你查询之后是不是升成结果级啊?结果级列的名称是不是必须跟我招啊这个类的属性名称一模一样啊,不然的话我们哪一步会发生问题来着? 是不是利用反射为属性复职的操作会发生问题啊?因为我们底层是利用列名或者叫 列的别名去获取的属性才能为那个属性设置值,还记得吧, 所以说这里要注意,所以说,因此我这条三口语句他必须给我这个列起别名,那么才能让他升成结果级的名称,跟我数清名一致。 能听懂我说这个意思吧。哎,那叫 flow id, 那下一个呢?他叫大写的太婆,我们要的是太婆, 下一个他要的是 id card 嗯,那当然, id card 咱们名是不是没变呢?下一个他要的是一个赞 car 的我们要的是一个赞 car 的他下一个要的是 他下一个要的是什么来着? student name 吧。 student name, 我们要的是 student name。 然后紧接着呢? 空逗号逗号啊,然后紧接着呢?他要的是 location 我们要的是 location。 他要的是格瑞的我们要的是格瑞的。然后 from 呢?叫 exam student 这张表,然后 where 呢?按照 准考账号查吧。准考账号那就一个赞 car 的等于问号。这就是这条三口一句, 看到吧,没写错吧。哎,注意啊注意,起列的别名一定要起,如果不起会发生问题的,那就十二口传过去查。完事了之后我们 十二口要完事了之后我们说该反射了吧。我们要一个什么对象啊?我们要一个死丢的他的对象,然后站位服填充按准考账号。啥准考 证?刚从键盘接收的搞定,那么查询了之后他会给我们返回一个死丢的他的对象,拿到他以后我们是不是就可以验证成不成功了呀?如果死丢的他一等于闹,说明什么问题?说明 查无此人,请重新进入程序吧。哎,叫做查无此人,请重新进入 程序。那 l s l s 说明就查到了呗。那查到了的话,那我就直接输出对象的引用默认调用秃子俊就得了,大家可以拿到了数据是不是拼成一个你喜欢的结果呀?哎,咱们就不拼了,有数据就可以了。 行,那么就测试一下 a 按准考证号查试试。那么 a 按准考证号查,我先输入一个错误 的查无此人,请重新进入程序,看到吧。嗯,那么这次我再选择 a 按准考证号查,我们再来个正确的 正确的准考正好这个比如说来个张三啊,回车那不是就有了呀?张三这个人北京大张三这数据就有了。至于这个数据你想拼成什么样的格式,看你心情即可, 看懂吧。哎,那这就是查询,那按身份证号查,是不是一模一样啊?一模一样,准考证号查会了,身份证号一样上来就是请输入叫身份证号。哎, 冒号。接下来接收一个身份证号,点耐克斯特得到一接收一个 id card, 拿到 id card 之后呢,我们是不是就要查询呢?其实社会句 再来,只不过条件变了吧,刚才是按准考证号查,现在是按 id car 的查,然后呢,同一个作用范围以内变量名不能重复啊。所以说他叫四扣二吧。 ok, 那么紧接着我就可以 q r 点快瑞四扣二传过来,然后呢?查询之后他给我返回一个丢的他的对象,然后 id card 从键盘接收填充站位符, 搞定,查询了之后给我们返回一个 s 丢瞪他二。拿到了以后我们可以判断成没成功,如果等于 no, 那就说明查无此人。查无此人,请重新进入 情绪,那就说明查到了,如果查到了,那就直接我就打印信息即可,完事。 一模一样好吧,右键运行别看代码多啊,但是功能都一样。选 b 身份证号,先来个错误的回车,查无此人,请重新进入程序,右键再运行一下。有点麻烦哈,我们要是重新输入就好了哈,一会我们有个重新输入的练习啊,都一样。 嗯,按身份证号查,我们再来一个回撤。那是不是一样的呀,看懂吧。哎,按身份证号查,一样的,这就是这道联系, 要有思路,听懂吗?哎,要有思路,一步一步的先去构建,先把会的写的一点点往里填就没有问题。好吧,多余的包啊, f。

注解说完之后,接下来呢,我们继续来看注解里面这个咱们单元测试里面的一些细节的问题啊。我们来说一下这个问题。 哎,我们这个单元测试的话呢,这个这些步骤这些我都不记录了啊,我们直接呢从这里开始有这几个问题啊,或者几个细节啊,细节是这样的。第一个啊,第一个我们之前知道啊,就是你要 app test。 注解测试的方法是不是要求什么样? 要求这个方法是有是 public, 就是 word 对吧?无返回值呢?所以现在我有个问题啊,第一个就是如果呢方法呢?不是叫做这个不是这个 public 对吧?嗯,这个空餐对吧?无返回 讲方法对吧?嗯,能否测试啊? 如何测试? 这是第一个问题。再来第二个问题啊,这个测试类名和测试方法名是否有这个命名规范呢, 对吧?那么咱们这是这两点。第三点, 红色一定表示对吧?啊,错误对吧,绿色 一定表示这个正确吗?对吧?那么所以这里面我们就看一下这几个细节啊,把这几个问题我们来看一下对吧?嗯,我们这个来一个个看啊。呃,这里面呢,这个如果 方法不是,怕不立刻空餐无返回的,这种方法能否测试啊?这个能不能测呢?其实是可以测试的啊,可以测试,那么只不过他是不能直接扛那个 at test 注解他必须呢 要去在咱们去这个写一个单独的这种测试类,去对应那个方法进行一个调用,还要进行调用测试,能行吧啊,所以这块呢是可以的。 在什么在测试方法中啊,调用测试对吧?不能。什么呢?不能直接加重,要加 at test 注解测试啊。好,就是这个。所以呢,它是可以进行调用测试的。 好。那么所以呢,一会呢,我如果有这样的一个方法,我们就可以进行一个这样的测试来。比如说,我们举个例子啊。嗯,在这里呢,我们来写一个。写一个工具类啊。嗯,这工具类叫买 max。 写个随便写一个简单点的就好了。这是数学工具类啊。好。那么这里面呢,我们有一些方法。 burber 那么像工具类这种方法啊,他是不是构成的话,首先会私有是吧?嗯,我们把 public 要改成 prior。 呃,除此之外呢,其余的所有的呃方法是不是静态的?他会工具类的一个规范是吧?我们这里面呢,可以来一些这个操作。应承,我们叫做善是吧?我们可以来进行叫做应承 a 做好印测 b 是吧?我们来印这个直接 return 吧。 a 加上 b, 这是一个方法吧。 接下来呢,我们拍过了一刻 static, 我们这里面来个印测 mx。 注意了,我这里面的方法都不难啊,因为我这里面不是在给你讲工具类,我是在给你去演示像这些方法怎么去调用的问题。 写一些简单的。好了,接下来我们来印册 a 逗号印册 b 是吧?来,让我们来看一个来。 a 如果大于大于 b, 问一下是吧。啊,如果是怎么怎么样?那么注意了,我写成 b, 再写成 a 了。比如说你写错了是吧?我就是专门的去 写错。这样是不是在好像在搞什么是最大在最小值。反正好像在最搞最小值是吧?但是不担心,我们先把这个代码写在这里啊。 好,写在这里之后,接下来我们在这边呢来看。刚刚说了这种方法呢,你是要测试的话无法直接进行什么样测试,不能直接上面加一个才能做解答,这个是扛不了的,因为他有这个要求吗?是吧,说你想测试这个啊,来右键你看这根本就没有那个箭头看到没有? 你看这运行箭头看到没有?你你你这是根本运行不了啊是吧,你看运行不了的是吧,不让你去运行这种方法啊。 好的啊,所以这里面呢,这个是扛不了。那么现在如果我要去进行测试,我得怎么办啊?然后说呢,就是我们得自己在写一个测试类,在测试类中呢,再去这个搞一个测试方法对吧,在测试方法中再进行调用,挺好的啊。 在测试里补一下吧,就是叫测试类的测试方法中调用测试啊,不能直接加这个注解。 那么现在我们是不是就要写对应的测试类跟测试的方法啊,以后呢,对应的这么一个类啊,那么你要测试一个类里面的一个方法,你可能到时候都会有一个对应的测试类啊, 会有对应的测试类。后期呢,我们会有专门去放测试类的一个包啊,那比如说你这 src 是吧,是这个。那后期呢,可能会有个包叫什么呢?叫做 test, 而且这个 test 啊,他说他有这样颜色显示这里面呢,叫做这样的啊。点哎,这个颜 这颜色对吧?这是绿色,上面是蓝色是吧?那么你看他会有这样的一个包,专门就放你的测试的代码的啊,那现在的话我暂时不放这里啊。好来我们就还是往这里来。放这里面呢,我们就搞一个这样的测试的类。那么这个测试类的话呢, 我们就是要看到第二点了,他有没有这种?嗯,命名规范呢?是有的是吧?有的。那么这个规范是什么样的啊?测试类名他是这样的一个名字,他是叫做类。测试类。 被测试类后面加上类名,后面加上一个什么呀? test test 这是测试类名啊。如果是测试方法名呢?是被测试方法, 这个 test 也要加上,但是不是加在后面,而是加在前面。 test 加上被测试方法。那么这个测试方法呢?首字母肯定要进行一个大写的啊,首字母大写 好的,就是这么一个规范。那么所以现在呢,我们要去写这种测试代码。我们其实应该取一个名字,这叫什么呀?叫什么?叫什么名字? my max 什么呀 max 这是咱们测试类的名字是吧?这是测试类啊 测试类。那么对于呢,咱们的 mass mass 类呢?进行什么呀?测试啊?进行测试。好的,那么这次是这个。你现在你想要测试这两个方法对吧?咱们想测试两个方法,你可以怎么办呢?你可以在这里面呢啊,去进 调用啊,比如说他会一个 word, 我们要 test 是测试什么方法?散方法。那你就用 test 散首字母大写,因为多个单词组成嘛,是吧,要进行驼峰命名嘛,是吧。那么现在接下来呢?我们这个小跨大跨吧, 在这里再加一个艾特开始的注解,那么这个就可以了是吧?现在你在这里就可以调用他吗?调他们这个方法吧。这个麦麦斯点麦克点上是吧?我们这是上方。反正现在你可以传十,逗号二十啊。那这里面就会有这个结果。 散,你是不是可以输出散了散了好,加速十秒散。好的,行。那么我们就可以右键运行来测试这个方法啊, 是不是三十啊,那这个就可以了。所以正常能测试吧,对吧?每一个方案都能测试,只是说他能不能直接扛这个注解的问题啊,所以每一个都能进行测试。好的。那么现在的话呢,我们这个第二个问题就说啊,是吧。那么第三个来看,红色一定表示错误,绿色一定表示正确吗? 那么这里面是不一定的,不一定对吧。那么如果是异常的话,出现异常,出现异常啊,确实可以这么认为啊,确实是是这样的啊。如果是出现异常,确实什么确 时会这样显示,但是什么呢?但是这个程序中的中的逻辑错误,逻辑错误啊,这个无法什么呢?无法体现,无法使用什么呀?无法通过这个这个绿色体现 出来。听懂啊,无法通过颜色体现出来啊,颜色体现出来就是他一些逻辑错误,我们没法搞定啊。你是一些这个运行的错误可以是吧,运行的异常可以是吧,如果出现运行异常啊, 确实会这样去显示对吧?好,那么但是呢?程序中的逻辑是无法通过颜色来提示一下。嗯,听得懂我说的意思吧。那比如说现在他们那一刻叫做 word, 我们有个 test max 吧, max 这个方法。那么接下来我们这里面呢?也是嗯,来扛的 test 就是渡劫啊。我们在这里呢,我们就来一个 my max 点 max, 我现在传一个值啊,传一个八,传一个,传一个十是吧?那么接下来呢?我们这里面的 shock 一下吧,直接打印。这样咱们挖一下还是啊挖一下还是。那么这里面介绍一个值打印一下。我现在的话呢,这里面 改造一下啊。这是 max。 来我们现在运行一下这个效果啊。这次会立会红调吗? 他不会红条,他没有异常这些没有异性的异常这种这些问题啊。那么其实他就没有出现这种,这个对应的是不是红条啊,什么异条?但是你发现呢,我们求的是 求的是最大值。你给我返回八一看立条啊。对了啊,这个代码写对了。那你觉得对不对?没对,这个逻辑出现问题了。其实是不是是这个时候是无法直 直接通过这种体现的啊。但如果你要体现的话,如果逻辑的问题,你想体现 如果呢?这个逻辑逻辑错误,也想也想啊。叫做通过什么颜色体现则什么呢?可以通过叫做断言。 断言啊,这个操作啊来进行。好的,那么我们这里面可以有个叫断言的东西啊,可以去实现这个问题了啊,你的逻辑的问题啊,你要判断你这个逻辑到底有没有问题,我怎么办呢?这里面会使用一个东西叫做断言。断言。断言其实就是我假设的意思。 断言对吧?假设对吧,我断言对吧,你这个怎么怎么怎么样对吧?其实就是我假设你怎么怎么样 对吧?或者说但是大概就这个意思了对吧?断言就假设。那么说这里面呢,有一个叫做断言的操作耳塞耳塞啊,点里面有一个方法,这个方法呢,叫做耳塞耳塞 ecos 是吧?那我们这里面有耳瑞的啊,我们直接找这个 ecos 的这个就行了。 那么在这里呢,我们其实是可以用这个的啊,这里面有两个参数,一个是期望值,一个是实际值。比如说你传八和十,你是不是测最大值啊?我其实我期望这个结果得到的是十,但是呢,你真正结果是多少啊? max 这就是你真正这个方法是不是得到结果啊?如果你真正得到的事实的话,那么你这个就是什么呀?就是对的。我这种假设是不是对的?对的话,因为这个逻辑啊,确实符合你的要求了是吧?来,我们来试 一下到底对不对呢? 这个时候你发现他可就给你会报错的。他说你这里面逻辑出问题了,你觉得结果是十,但是我这个正常运行的方法出来,结果不是十二十几二十八,期望的跟实际的是不一致啊。那么这个时候呢,就出现问题了对吧?这里还可以点击看不同的地方是吧?不同点啊, 有什么用没有?来看,你可以打开一个新的窗口,他可以比较这两个结果是吧?这个没什么要看的啊。好的 啊,你们在这平台经常点这个出来是吧?那么注意了。但如果这一次的话,如果我这里面呢?这个一看,哎,结果是不是出错了,我把这逻辑改回来是不是改回来? a 这是什么呀? b 改回来了吧,我发现测试出现问题了,我把这逻辑改了 啊,这块东西出问题了是吧?这块出问题了啊。行了,我们现在再把改回来,再运行一次呢。现在呢,你的真实事实对吧?期望也是实,那么这是断言,这是假设,是不是正确啊?他就不会给你报 红条了,就是绿条了是不是啊?是这种情况啊,好就行了。那么我们这里面呢,主要解决了这么三个啊,这个单元测试的一些细节问题啊。 到此为止呢,我们单元测试的所有内容我们就结束啊。刚刚呢说的是三点,看到了没有看到这三点啊,这个都是大家啊,一眼是就能明白的东西是吧,这块呢,就不再做过多介绍啊,我们这个内容结束了啊。

好,在前面的课程中呢,我们已经为大家讲解了注解的一些基本概述,还有他的一些基本语法,以及他的解析。那咱们呢在前面也说了,注解的基本作用是对成分做标记,然后是不是进行特殊处理啊。那么我们接下来呢,带着同学们呢去 讲一个注解的应用场景,通过这个场景呢,可以让咱们的进一步的认识注解的作用。其实我们有现成的场景,是不是就是接力框架,人家接力框架是怎么用的, 他是不是这样子啊?他的第一若干个方法,只要加了一个所谓的是不是太子注解,那么就可以在启动时被触发,是不是执行。那没有加这个注解的方法能不能跑啊?他就不能跑, 明白这个意思吧。那我现在就把节用的框架是不是模拟出来就行了。那我就相信讲助理的作用了。好,怎么模拟呢?首先我是不是要先定一个自定义,注意写叫 max 的呀,人家叫 thas 的,我就叫什么 max。 然后只能注解方法,存活范围是怎么样,一直都在这个样子,懂吧。然后再定若刚的方法,只要有艾特麦克斯注解的方法就能在启动时被处罚执行。没有这个注解的方法呢,就不能执行。那你剪了吧。来到爱迪尔,演示一把 在列的位置。我这里是不是已经被我定了一个麦克的注解啊,他现在是可以注解什么方法,是不是注解这个类的好,这个呢,同学们注意下去,你倒是把这个怎么样一去掉是不是就可以了?那现在我认为他是不是只能注解方法就完了,而且存货周期应该是怎么样?一直都在。如果这个你不会写,你完全可以去拷贝人家了吗? 是经历框架的原码啊,你看人家是不是也是这么写的,对吧?好,我们把这个呢全部关掉,我们就认为什么呢? my test 这个注解是不是已经有了?那接下来我们 他是模拟的啊,怎么模拟呢?写一个类 a n o t a t l n test 四。然后呢,我在这里面是不是定义若干个方法呀, 比如说 whoy 的 tes 的一,这是第一个方法。然后在这边呢写上一个内容,代表我们完成的测试,这个内容就是 tese 一。好,这个大家看得懂是吧?然后我们再来一个叫 tes 二,这里也是 tes 二。好,接下来我们再来一个方法, 泰式的三,这里也是泰式三。现在我做个什么事情呢?我在第一个方法上面加一个 fmites 柱结, 看懂吧。在第三个这边是不是也加一个 mac 柱去。也就说我倒是启动这个类的话,我只希望跑哪一个 太子一,少太子三的。好,那我现在启动一下,能不能跑?不能跑。你注意啊。你这个跟经历过的不一样。 因为精神框架他家的猪姐。为什么他右键有菜单呢?啊?为什么他他右键有菜单?你看。 因为人家是不是跟爱丽儿是不是在合作呀?知道我意思说吧,爱丽儿是不是整合了他呀?他跟爱丽儿公司打了个电话,说我只要加入这个柱姐,你的你的这个变异器啊,就这个开发工具啊,要跟我做个菜单,要能识别啊。他是一般我做的菜单,你右键就是在启动一个程序。他这个程序叫扫描吗? 扫描是不是有这个注解。是可以跑啊。他给你做的按钮。我与经理之间的差距是不是就是差一个。跟 id 公司打电话。能不能理解我的意思啊。能,我只要给他打电话说以后我的麦太子注解你要给我做个菜单哦, 明白了吗?当然咱们自己也可以去做一个插件也可以,但是我这节课不是教你做插件对不对。那我们怎么办?我们没有菜单怎么办。我是磨了一下。 那我是不是认为我的闷方法就是个就是个菜单子都都是好 low。 他还是不 low 的,他还是可以代表的。这就是我们的按钮。启动菜单 是用梦方法表示。梦方法是不是可以启动整个泪啊。你看好但注意啊,这个时候不是让你去直接掉下太子一和太子三是不是就完事了。那万一人家以后把这个去掉了呢。我这个方法他必须要智能,他要有多么智能的。就是有注解的是才被调用啊。 没有注意掉不掉。不掉。那下次你把他去掉是不是他就他就也不跑了。你把他加上了他就跑了。我就做成这个样子的。不是说把他做成一个死的就只能掉太子一和太子三那是不对的对不对。但没把他做成灵活的怎么办?就做成跟那个按钮一样怎么办。 我是不是要提取这个类里面的全部方法呀,然后看哪个方法怎么样。有助解。有助解。我是不是通过 反射机制把它触发执行的。是不是要用到反射啊?看到没。所以反射做框架是经常出现的。来试一把。 好,同学们说我来做第一步怎么办?你是不是应该我看他的思路怎么样,获取什么东西啊?对,说的非常好,获取内对象,对吧?你没有内对象是不是什么都干不了啊?反射第一步,永远拿对对象,然后 app 的 demo 点 class 内置像素拿到了。第二步呢?提取是不是全部方法啊?怎么拿? masses? 中国 masses 等于 c 点儿 get 这个大的 masses。 然后所有的方法。然后呢?你们有没有注意到,我们之前讲经历框架的时候说过,他的方法是一定要公开,而且没有参数,没有反位置。 他就是为了方便你到做这个菜单的时候是不是可以全部拿到,而且是不是不需要担心要不要注入数据啊?而且不需要去接结果。所以你看人家不要你给参数,不需要你给。反而指的目的还公开的目的是不是就是为了你方便写这个框架啊?就他内部好,方便。实验框架要理解人家设计者的意图啊。 好,那拿到所有的方法之后能不能全部跑呢?当然不能。你是不是还需要怎么样?你要便利 方法,看是否有怎么样注解。有哪个注解啊? my test 注解有就怎么样跑,他有是不是就跑了,对吧?好,那怎么办?是不是拿一个 max 点 负好。然后呢?我们接下来呢做什么事情?我就直接问一下这个方法有没有注解啊?有,怎么问呢?我们教大家一个方法,叫 altitude amteition, 水镇的是吧?然后这个地方填什么 myx 点 class, 一旦进到这里面来了,说明此方法是不是有出血啊?是,那我们只需要干一件事情跑他。 但你这样你要跑这个方法的话,这个方法是不是要用对象处罚呀?他不是普通的。他不是这种方法。那我是不是要遛一个对象啊?但是没关系,这个对象相当于只是我的一个。什么?是不是只是我的一个相对只是我的一颗棋子啊?我利用一下就行了吗?是不是遛了一个对象出来了?对,然后他一定要有方法。怎么样 有方法是不是拿对象触发自己啊?做好了没有?其实其实已经做好了。有的人说你这个地方你你这个方法不需要去接结果,然后不需要去呃,传入参数吗?不需要。因为我们这些方法测试方法本来是不是就是没有参数,没有反为值 是不是也是公开的,不需要你做任何事情,直接出发就完了。这就是人家故意这么要求的。你看你看我之前写的呢,公开无三,无法为止。是不是有这样的一个要求啊。 好,回到我们这边来。其实我已经把这个框架怎么样模拟出来了,但是我们模拟只是人家最基本功能,肯定没有人家强大对不对?这思想肯定是一样的。那我们右键是相当于我现在已经跟爱迪尔打电话有的菜单了。直接跑一把。你看他只会跑谁啊。看 是不是太三个太子一啊。他顺序不仅是从上往下是吧。他有可能从下往上无所谓,只要跑出去就行了。然后呢?对啊,假如我不想跑太子一,我把他注解怎么样去掉,还会不会跑太子一了就不会,这绝对已经是框架思维了吗? 那假如说我想跑 ts 二往这边一加是不是就能跑了?是啊,所以是不是就是标记的做特质处理啊?对,就是注意 真实作用。我们就讲完了。好到这。其实同学们应该对于注册的使用可以说已经是很有深度了,因为我们开发商只要知道做标记特殊处理,如果以后你能自己拿这些东西做一些事情的话,心里就已经是做的很有技术水平的一个一个框架功能了。 所以说能了解这基本东西其实就够了,因为这些东西不是咱们开发中直接用到的,毕竟是属于底层知识啊,所以能了解的话呢,就已经足以啊,目前来看就已经足以了。好,回到我们的 ppt, 那咱们呢就说完了,如何通过注解呢?去解决一些问题,我们就讲到这啊,因为。

把那个简约的基本使用呢给大家演示完了啊,那么这个使用还是比较的简单的对吧?只要呢你打完了咱们的对应的价包之后啊,下面呢你只要在方法上面扛一个 ittys 的注解,是不是就可以让我们的某个方法单独运行起来啊。那么除了这个 ittys 注解呢,其实这里面呢他还提供了一些其他的常见注解。 好,那么我们来看一下这些注解啊。那么这个注解的话,当然里面最常见的还是这个 it pass 的啊,其余的这几个呢,偶尔可能见到。行吧,那我们来看一下这几个啊。他说这几个注解啊,是接近监狱的四版本就已经提供好了一些注解了。 那么这个除了 attest 注解,另外这四个分别什么意思?我们来看一下啊。第一个就是 at before, 第二个就是 at after。 好,那么这个 before 的意思就是在什么什么之前, after 就在什么什么什么之后是吧?其实是 是这样的,这两个方法 before at before, 加了 at before 注解的这个方法,他会先于我们的 attest 的执行, at 加到 at after 的注解的,就会一定会先于我们的。呃,一定会后于我们的 attest 注解的方法后执行。 看得懂意思吧啊,那么这里面呢,我们并且啊这个他的特点是这样的啊,这个方法执行一次,他们俩就会跟着执行,而且他们俩呢不能独立运行的,他要跟这里的探测注解的方法执行,这个方法执行一次,他们俩就执行一次,这个方法执行一次,他们俩就执行一次啊,是这样的一个特点, 而且呢,你每执行一次,他都会有执行的啊。好,那么下面呢,还有个叫 at before class, 还有个叫 at after class 这个方法啊,也是在先于这种方法之前,这个方法也是先后于这个方法之后能行吗? 这个方法之后去执行。那么这两个有什么差别没有呢?呃,他有这么一些差别。第一个差别,他们用的方法不一样,比如说我们像这个,这个,这几个啊,其实都是用在我们的,是不是叫做实力方法,说白了,费劲的方法上面 才可以使用。而这两个呢,他是一定要用在静态方法上面。这是第一个差别。第二个差别呢,是这个方法啊,他只会执行一次。 不管你里面的测试方法执行几次,他只会执行一次啊。那么而且他会先于所有的注解的方法执行的,他是最先执行的。 然后呢, and after 他也只会执行 after class, 他也只会执行一次。而而且他会把比所有的方法都晚去进行执行,也只会执行一次。 好,这就是他的一个。呃,这个区别啊。那么现在的话呢,我们这个就可以去演示一下对吧?下面其实他也解释了啊,测试方法执行前执行的方法,常常用于初始化。呃,之后呢,常常用于释放资源对吧?那我们演示一下这几个注解啊,在方法上去加上我们来试一下就完了啊。 来,我们回到我们 id 去进行一个演示,我这里面呢,切换回我们的 id。 好的,那么在这里呢,再来搞一个这个测试类啊,叫做 gunit, 叫做 dem 二。好,那在这里面呢,我们就要演示一下这个常见注解啊, 常见柱结的使用。那么在常见柱结的使用呢?我们给你们搞一些方法啊。 upper 一个 word i n i t delete 这么一个方法。那么接下来呢?我们继续啊,给你们再搞一个方法, upper 一个 word d e s t o r y it's t r o y 是吧? destroy 好,这样的方法。那么接下来呢,我们可以继续再搞一些方法,比如说他们的一个 word 的秀。那这里面呢?我们名字懒得想啊,秀一秀二秀三行吗? 好的,二三四好了,就搞这么一些方法吧。那么现在呢?我们来测试一下。在这里呢 进行一些测试。嗯,这里面呢,我们比如说啊,在这个方法上面呢,来一个 at at test 这个注解是吧?在这里呢,我们自动啊,这就打了包了价包已经有了啊。那么这里面 test e 效益是吧?效益这个执行了啊。嗯, ctrl c 粘粘过来。然后呢,全部改造一下就行了啊。这是二三 四是吧?啊,这几个方法。好的。那么这两个话暂时我先不去看啊,先不去看。那么现在呢?我来去,在这里面去加一些东西啊,加一些东西。比如说我在这里呢,去加一个。在这里吧。加一个 at 比负。 在这里呢,就加一个 at after 是吧。那么现在的话,这个效果是什么效果? 我能不能独立运行比 four 的方法和 f 的方法呀,运行不了。你发现前面都没有运行的按键吧,你右键你看一下,能给你运行那个秀四吗? 运行不了。秀三呢?也运行不了对吧?这里面是让你运行整个类啊。好了,这个方法他不能独立运行啊。那么这两个方法呢?他的运行是随着我们 attest 的方法运行,额运行他会取 for 的,会先以 attest 方法执行 after 这个会后于他。 所以先输出什么,再输出什么,最后输出什么。三一四是这个效果吧,那就三一四了啊。好的行,那么你就看到这效果了。同时呢,我们要继续说这个方法呢,是你每执行一次 attest 注解的方法,他都会执行一遍他们。 那么现在的话,那么再执行一个 ant test 秀二方法,那么这个这两个方法会不会执行,是不是?是不是也会啊?每一个 ant test 注解的方法执行的时候,他都会在他们先后去执行这两个方法的。 你可以看到秀三。首先呢,在执行当前这个方法秀二吧。最后呢,执行这个 f 的这个方法从秀四啊出来了。那么接着你继续啊,我来把整个内意中的所有方法都运行一遍。那么当他运行所有方法的话,肯定是运行什么?这两个方法是肯定无法运行起来对吧?即使 你加了一些东西,那他也不行的啊。设置比如说 i n i t 加了输出对吧?这里直接是 i i t 啊,就完了,只要 distory, 那么这样的话是肯定不会执行的。那么他执行肯定是在执行这四个什么方法啊。那么我们来运行一下看,这里面我要整体运行啊,我们就点中类的范围 乱这个类就好了啊。那么现在校一也会执行,校二是不是也会执行啊。那么这比 for 的方法跟 f 的方法执行几次呢? 只限两次哎。那么所以这块是这么一个效果来看啊来看。首先呢,我们这里面呢是秀三执行是不是比错了方案执行了一次啊,然后再秀一执行 是不是校一执行啊, lts 呢?然后校四执行是不是这个 fa 又执行了。那么接下来再来你看校一校四是不是又执行了,意思是你每执行一次,你像校一跟校二三的 lt 注解的方法,他都会去执行我们的啊, before 跟 after 能行吗?啊,这是个特点。好,接下来呢,咱们继续看啊。在这里呢,我们还有方法 in it 和 district, 现在呢,我来加一个注解,叫做 at, before 是不是还有 class 啊,还有叫做 at and after 是不是 class 啊。那么这两个方法呢?注解的方法要求这个对应的方法一定是 static 的形式的,如果不试,你试一下看什么效果啊。 我们比如说执行一下效益啊,我们说执行效益的话,他也会这两个也会分别先后执行啊。那么你就看一下他到底能不能出来,还是说报错啊, 其实就直接就报错了是吧。那直接说的是就是这两个方法啊。修的第一 steady 是不是应该为 steady 修饰的,这个英语的 这里面呢,其实告诉你,你必须要是这样的啊, static 啊,这这些方法就不能 static 能行吗?这是他的这个差别。那么第一个差别就是他是静态的,他们是实力的。那么第二个差别是什么?我们之前提过吧, 这两个方法呢,他只会执行一次。不管你这里面测试方法有多少次执行,他也只会执行一次,这是跟他们俩最大的差别。原来这个这两个方法是 哎,这太子方法执行一次,他们执行一次,再执行一次,他们就执行一次是吧?啊,如果有多个太子方法执行,他们会执行多次,但这两个方法只会执行一次。 好,最后又一个问题啊,就是呢,现在 at before 的方法先执行还是 at before class 的方法先执行 before class 的方法是最最最最先执行的对吧? 这就最先执行的,你可以认为他是相当于是随着类的加载而执行是吧?是可以这么认为啊,就是他最先的啊,而且只会执行几次一次是吧?类加载只加载一次啊,所以他只执行一次吗?那么这个呢?是在整个类是不是最后来执行的?呃,整个所有操作完了之后,最后来执行这个方法啊, 来行。所以我现在呢,整个把这个里面的所有方法来执行一遍啊。来看一下,你就可以看到我把这里面所有方法执行一遍啊,运行的是整个类的啊, 你看它效果是什么?最先只有一个 in need, 最后只有一个 destroy。 而中间呢,你看你执行的秀一跟秀二成,这两个 taste 方法,在他们之前是不都执行了? b for 的方法, up 的方法后之后啊。咳,也是先执行的 before, 之后就执行 after。 所以通过这个运行,你就能看到 这两个差别了是吧?好了,那么这里面呢,我们就把这些常见的注解就看完了。那么这些注解呢?是对应的是咱们的简易的四版本的啊,如果我们是五版本呢,那这里面呢还有一些注解。那么咱们呢可以回到 ppt 来看一下啊,这些五版本对的这些注解 主要是五版本注解啊,也提供了一些这样的注解,就是什么 before e 起, after e 起, before 和 after。 但是呢,他说了啊,咱们这几个方法啊,你看他描述吧, before e 起跟我们的字里面的 before 怎么样? 一样的吧? after each 跟我们的四的那个 after 是不是一样的哎,那么这个 before or 呢? before 在所有的之前说跟那个 before class 是不是一样的? after all 是不是那个跟咱们的 after class 是不是 也都是一模一样的啊?你。所以你发现的这里面其实都相同的是吧?咱们就没有必要去说这个问题了啊。好的,一般来说我们主要还是关注一下四就好了啊,因为我们平常还是主要用的是节约的四啊。这个情况。那么这里面现在你用什么?这个。呃,这个比方一起能用吗? b four e 级是不是没有这个 b four e 级是吧?嗯,因为这个 b four e 级呢,是叫做五版本的是吧?四版本里面是没有这个,你除非切换到五版本这个时候呢,才可以进行一个使用啊。好的,那么这些呢,我们就不再多说啊,了解一下就完了。我们这里面其实最最最要的大家掌握的就是这个什么 注解? at test 注解。好了,这些常见注解的我们演示到这里其实就足够啊,不再多说,我们结束。那么这里面呢?最后我们看一下这里面有没有总 总结是吧?啊,这边总结没有的话,我们自己总结一下啊。来,我们找一个同学回答一下吧。行吧。哎呀,这个下一个同学吧,我们回顾一下吧。刚刚这个注解。好的,那么刚刚这个注解的常见注解我们刚刚学了几个,只要说是的就可以了。 before, after, 还有 after class, before class 是吧?嗯,那分别呢?这个作用再快速描述一遍吧。 before 的作用, 这个方法之前执行 after 呢,之后执行是吧?那么他们执行的话是会执行几次, 再再执行一次这个方法,他们俩的方法就执行一次是吧?那么那个他们对方法有什么要求? 实体方法不能是静态的是吧?好,那么 before class, after class 呢? 用 study 修饰的这种方法是吧?他们的运行的话呢?只 执行一次是吧?而且是最先执行,还有一个是最后执行是吧?好,很好,请坐啊。那么就是这几个注解是吧?那么这里面呢,常见注解我们就说完啊。那么到此为止呢?我们这个内容啊,就常见注解的问题就说完了啊。好,我们这个就结束一下了。

洁面手也可以测试加热程序。 下面呢,我们首先需要准备变音软件,准备说的是本身不提供变音器的,所以我们需要借助第三方的变音器才能实现的。第三方变音器常用的,比如我们就用一个例子就可以了, 那么一个例子当中需要导入下面这五个包,那么这些包的话呢,本身都是节目上里面的包啊,我们把它呢导入到 excel 当中就可以了。拉一步,下面呢,有三个包,液体下面有两个包,到时候我们直接照着导入就可以了。下面呢,我们去看一下环境, 这个我们暂时不需要了啊,所以我们就关闭了,不保存了哈。嗯,先关掉准备车,或者说暂时准备车我们关掉就行了。暂时不用了啊, 直接关闭。那么下面呢,我们打开 everys, 把需要的那几个包我们先复制出来,指名车当中拉一步,下面有这个啊, avalon, 还有像招粉啊,还有 log kit, 往后翻 这个啊,还有一个 locky 的,把这三个比如我们复制到专门上来。 那么这些包的位置的话呢,你随便放到什么地方都可以的啊,到时候,呃,直接往那里面倒包就可以了。 还有一个是赖布下面的液体里面,我们还有两个,一个是靠这一个,一个是加上这一个,这两个我们复制到是 上去不要剪切啊, ok, 这样就可以了。那么我们的一个类似也打开了,打开以后呢,我们之前曾经写过一些程序啊,这些程序我们暂时不要了好吧。呃,其他点加软我们就不要了,直接关掉,直接删除。 下面我们需要把刚才那几个包给他倒过来,或者说引用包就可以了。勾肩配置路径,配置勾肩路径啊,库里面选择添加外部这样文件,选择刚才我们所复制过来的这些文件, 下面这个是 mac 后的,不需要了,我们在这不需要连这个 mac 的数据库啊,这五个就可以了。确定, 好吧,把这五个包全都倒过来啊,必须倒过来。那么接下来我们创建一个闭册程序,假如我们编了一个账号程序,需要去测,好吧,这个程序呢?假设是两个书相加吗?我们加做一个 i 的 啊,这里面可能还有闷函数, 这是艾德雷啊,那么里面的话,比如还有一个方法,帕布雷克,或者我们直接呃复制一下吧。大家看一下这个电脑哈, 跑步,这个印特萨姆,印特 a, 印子 b 表示什么呢?传递两个参数 ab, 然后我们这还是叫 sam 用于返回 a 和 b 的,和 a 加 b 啊,那么这个是一个主方法,闷号闷音方法, i 的麦斯等于牛,麦斯牛爱的,比如说创建一个对象,麦斯啊,那么 c, 这么啊,我的朋友呢, mac 点萨姆调用这个萨姆方法,这样的话呢,就能求出两个数的和了。好了,那么下面我们直接粘过来了哈,直接给大家解释一下,然后粘过来不自己不再敲了啊,好,当然我们可以运行一下这个程序 骗 ok 得结果是三,是不是啊?哎,其实这个主程序的话呢,无所谓的啊,闷的话我们可以注视掉,好吧,他主要测的,我们将来是测他的,好吧,这样的话就可以了,然后保存一下,就是我们被测的这个程序, 下面我们就关掉了啊,假设我们要测,他下面我们要去编写测试程序啊,编写测试程序啊,这个测试程序的话呢,需要比较麻烦点,他要用的这个抽象类, apple dragon 的加入了三步来, client 跟我们前面倒那些包是有关系的,这个包是跟紧密是有关系的,有紧密的支持去测试加入程序。 那我们首先去建一个类就可以了,这个类需要继承 apple 这个的 java sampler。 client 发现什么呢?这抽象的 java 类啊,抽象的,那么 java 是取氧气的客户端。 哇,就这么个意思啊。好了,那么下面的话呢,我们需要去建一个类,那么这个类的名字呢?你可以随便起,比如我们就按照奖励里面的加入 test。 好吧,把 min 呢暂时勾上,一定要勾的哈,将来再说,将来再继续再修正好了,那么过来以后, 我们把其他方法呢粘过来给大家解释啊。首先,那么这个类的话,必须继承下面这个抽象的类,这是抽象类啊, ctrl c 后面 attends 就可以了, extend 继承粘过来。好吧,那么粘过来以后呢,他出现红色波浪线,需要我们导入包,如果说你手表放在这,他没有导入包,说明你前边的那些引用的这些文件不正确, 你这五个没有引用过来,或者说引用的不正确啊,所以一定要加过来的,好吧,你只要引用包正确了,这个写法是固定的, 他是一个关键字的啊。后面的话呢,我们看他有一些没有时间的方法,我们直接点就可以了哇,抽奖方法,上面这个要有些要实现的啊,未实现的方法添加过来,好吧,这个闷的话呢,我们最后用就可以了哈,但是只加过来一个 rantes 的,表示的是运行测试的意思,运行测试的哈, 好了,回头我们再写,一般情况下,我们这个地方有点编写框架的意思,有编写框架的意思啊,那么这个地方的话,首先我们有在测试之前要做一些准备工作,测试过程中要执行测试,软菜的执行测试,还有测试完了之后我们也要做一些准备工作。好吧,下面呢,我们先做一些 这个成员变量哈。克罗斯啊,这成员变量是不是,哎,我们这个类的成员变量啊,巴布利格,艾德泰斯特,哎,等于纳尔。那么这个地方就是创建一个艾德利嘛,啊,艾德类的 对象 tast, 好吧,然后 sun, a, s, n, b, 然后 szr 的 a, b 表示两个传递的参数,将来我们要给他两个参数 ro 的,比如我们表示结果,好吧,比如表示结果啊,好了,其他的呢?我们这样闷呢,暂时不需要。 老妹,咱们不需要我们把它给放后边去啊,放最后边,这样看起来容易看一些。

在上一个视频呢,我们说了一下这个登录的流程,咱们简单做一个回顾啊,当程序啊运行的时候啊,那么会是什么效果呢啊?如果说啊,在 呃这个登录页面,如果用户名和密码相同的话,那么是一个登录成功啊,如果不同呢,那怎么办呢?就会跳到一个失败页面啊,就是当时的这个处理流程,咱们完成了什么呢?呃,从 在搜列之中啊,获取从页面传来的参数,然后呢根据用户名和密码售后相同完成了一个跳转啊, 那么这节课呢,咱们来看一看咱们的变化啊,咱们希望这个登录过程呢,要等慢,要通过 d a o 来处理啊,要结合前面的内容啊,把 d a o 做一个整合。那么咱们看一看当时的咱们 业务逻辑啊,咱们的业务逻辑呢,是用户名和密码相同的时候,我认为他他是到哪个页面去啊?那么今天呢,咱们来把它做一个变化, 首先呢第一个咱们要用到买思考,因此首先要强调咱们的内裤呢,现在开始要放到哪个呢?在工程的啊 web content 目录下 有一个啊, live 的一个子目录,咱们需要把咱们的内裤啊放到这个目录下边啊,那么首先呢,我去找到我的 驱动,首先呢找到咱们的 mac 口的驱动啊,咱们连接的是 mac 口的八点零,所说驱动呢也是八点零的版本,然后右键咱们去拷贝这个文件,或者说啊 ctrl c, 然后呢到咱们的 eclips 下边找 到内裤目录,点击右键去粘贴,这样的话啊,咱们这个驱动啊就已经加到了啊,咱们的啊工程这个 lab 目录下了啊,然后呢要做一个处理,什么处理呢?看到工程的属性啊,点点击工程 啊,选中之后呢,点击属性啊,右键选中属性,在加我的变音路径里边。我们去做什么工作呢?要看一下,在这边要去添加内裤,但这个内裤呢,添加方法和之前有一些变化,咱们要使用第一个按钮叫 adjance 啊, 有时候我要找到我的工程,然后怎么办呢?找到外边 content 目录下的啊,外边 info 找到我的内裤目录里面的满色号的八点 的驱动,点击一个确定,这样的话,咱们的驱动啊才算是一个正确的添加啊,这是第一个需要注意的地方啊。第二个咱们来看,要按照字影向下的次序来完成这个代码,那么怎么去写呢?咱们看一下, 那怎么办?咱们首先第一个,咱们是有一个标记啊,这个标记怎么去获取一个值呢?咱们这样啊,需要去,你有一个什么呢?是叫 user d a o 啊,然后咱们向他呢来发一个消息,什么消息呢啊,你去啊,登录,登录的时候把什么呢 啊?从页面传到的用户名和密码传过去,然后完成这个控制。那么如果登录成功的话啊,咱们就要替换这个业务逻辑了啊,如果 f 是处的时候,那么就可以跳到什么呀?成功页面。 那么这样保存代码之后呢,咱们来看一看咱们的 user d a o 应该怎么去啊?完成好,那么我现在去呢,去新建这个类啊,在 demo 啊木包下边, 我去新建一个类,就是咱们的 d o, 我把它放到 d a o 包里边,那么叫什么呢?叫 user d a o finish, 这个 d o 的写法呢,和之前是一样的,所以说我这边呢,我把之前的有一些代码把它拷贝过来,咱们的 open 和 close 啊,是咱们需要怎么办啊?我这边就不用啊,变成什么了? static 了,直接改成这个啊,普通的没有修饰符啊,油耗访问类型就可以了啊。 好,那么现在来完成咱们的方法啊,咱们的方法里面呢是这个代码啊, public 返回指示 boss 类型是什么呢?名字叫啊, login 传入两个型餐是什么呢?是用户名和什么呢?和咱们的密码啊。 那么咱们现在去完成这个方法 啊,首先呢让 程序能够变异通过,那么咱们要做什么工作呢?还是和以前一样的啊, 第一步,获取连接啊,获取连接呢,加上 char 语句啊 啊,当出现异常的时候,咱们去打印异常,注意在哪个地方呢? 在翻的一部分,咱们要去确保啊,能够关掉这个连接啊,这是咱们这个处理啊,但是说这个呢,这个 open 的代码啊,最好是放在什么呢?放在 char 里边啊,这样最好。好,那么咱们现在去完 成这个代码啊,首先思考语句啊,是从哪个表呢?我之前先把标记表建好了,咱们看到啊,叫马优色的表,由三个字段, rid 呢是主码字,增长呢是整数类型, 名字和密码呢,都是支付串啊,名字是唯一的,密码不能为空。然后呢我加了两啊,一一条记录 a a b c 用户名啊,密码是一二三,那么数据库那边呢?我都已经把它填到数据库了啊, 回来咱们是什么呢?是啊,从怎么办呢?从 my user 表来查询,查询什么呢啊? select 啊, 从哪个呢?是 select 咱们的啊, p w 这个字段啊,从咱们的马油分表来查找,什么条件呢? 外啊,用户名等于一个问号啊,因为咱们可以看到咱们在这个结构里面呢啊,明确多了一个啊,指定用户名啊,是一个唯一的啊,那这样的话,咱们的是 java 思考的哪个呢?叫 prepare 的啊,获取生命对象, 它怎么办呢?它是通过 connection 去 prepare statement 传入思考语句,然后呢去把它怎么办?把第一个啊 问号替换成哪个值呢?是一个字符串替换成咱们的啊用户名,然后接下来怎么办呢?去执行查询啊, read downset, 那么这个 read downset 呢?咱们现在 那么我们先导入这个类啊,那这是一个结果集啊, r s 等于等半呢,是去执行查询啊,执行查询, 但是说呢,因为这个 name 这个字段是一个 unique, 是一个唯一的,所以这样的话,我可以肯定返回结果最多有一条,这怎么办呢?咱们这边用 r s next 啊,用 if 来做一个判断,如果有这条记录,那怎么办呢?咱们就去做一个查询, 咱们就去向结果机去 gets 去第几列呢?就是咱们的第一列啊,那么如果说啊,咱们的同用外部传来的密码 怎么办呢?和咱们数据库里面的密码相同,那么只有这个时候怎么办呢?这个 f 啊,才能是一个处啊, f 才能是一个处啊, 那么这样的话,咱们就可以怎么办?就把这个代码就完成了啊,所以说还是一个自顶向下的次序,那么回到 login solid, 比如说你去构建一个 dao 怎么办呢?你向他去发了一个消息,让他去登录,那么咱们现在呢,接下来需要导入咱们的优色 dao, 那好,这样的话,整个这个代码呢,在保存之后啊,那么呃, eclipse 呢,会帮你啊,自动重新啊,去部署到 tomcat 里边,那么先不要着急去测试,那么我这边呢,来说一个概念啊,那么你怎么才能知道我的这个啊? 捞根引方法对还是不对呢?咱们进这个地方来加上一个什么呀?所谓的叫单元测试,但还不是严格意义上的单单元测试,咱们选择看一下啊, 咱们看到我加了哪个函数呢?是咱们的主函数,比如说我希望在这边呢,我去测一下我的 d a o 是不是正确的? 好,咱们看啊,那么 f 怎么办呢?去 d o 去 log in 哪个呢?咱们知道啊,当用户名是 a b、 c 的时候,咱们看一下这个数据库啊,这个记录 啊,密码是一二三,对不对?那么咱们回来啊,有说我传入这两个值的 之后啊,那么如果说这个 f 呢啊没有获得处,那我怎么办?我去输出 啊,就是说你当你的用密码正确的时候呢,反而啊,他怎么办?他没有验证成功,所以咱们这边呢,要多一个提示啊,这是第一个,你不能只是对这个什么呀成功的情况来做个处理。 怎么办呢?你还要给上一个错误的,比如说不存在用户和不存在的密码,那么肯定这个地方应该是一个错误的值,所以说,那么如果这个时候呢 啊,返回未处了,反倒是什么呢?就是说啊,当出现一个啊错误的密码的时候,反而出错了啊,这样的话,有时候咱们这边呢所谓的单元测试啊,啊,有点投机取巧,但的意思呢?是什么呀?是通过啊, d a o 呢?你要先去验证,因为毕竟啊, 这边的这个框架稍微复杂,是从页面啊传递到 tomcat, tomcat 呢调度 solid, solid 呢?再去调入 daodao 呢?通过 gdbc 再去访问数据库,有一大串的传递关系,因此啊,咱们从这边呢来做一个传递啊,就这样的话,假如说我刻意的把这个密码 这边呢,我给他啊改一个错误的逻辑,你看他这样以来的话,永远返回为处吗?对不对?咱们来看看这个地方 啊,我刻意加了一个错误,那么我就可以怎么办呢?我就可以去啊,运行注意一下,这不是带这个服务器运行,是运行一个家务的应用程序,那你会看到呢?怎么办?当错误密码的时候 反而怎么办?反而是错了,是在这一行出了错,有时候两个错误的密码原因在哪呢?是因为我把啊反馈值默认值啊,应该是一个错误的情况啊,把它故意加了这么一个错误啊, 就这样的话,咱们怎么办呢?在修改成功之后啊,找到问题啊,或者说还有一个方法,还可以怎么办呢?去单步添加断点, 断点呢?然后怎么做呢?你去啊,去把它得八个 i 的一个加我的 application, 这样单步去调试你的 dao, 看一看在哪一步出了错误,也便于你去查找这个错误啊, 那么这个过程呢,我就不演示了啊,那么这样咱们通过这样的话,在改完之后呢,咱们看到啊, 你会发现呢是没有错误输出的说明,怎么办呢?咱们整个这个代码啊,这个 usd o 呢,它的逻辑部分是没问题的, 那么在 solit 那边呢去,比如说这对于 solit 而言怎么办呢?我要去保证这个人他没有向我隐瞒什么事情,他给我的结果是一个正确的情况,那么我才能怎么办呢?才能确保啊我的 solit 他的职责更加清晰,那么你的代码呢? 在啊运行的时候,可能那基本上就一次性就能通过了,所以咱们现在来做一个测试啊, 好,因为现在呢代码都保存过之后啊啊,咱们的这个 tomcat 已经自动帮咱们做了一个加载了啊,那么咱 这样,咱们现在啊这边呢,还是需要重新从啊登录页面啊,咱们去重新运行吧,在服务器运行啊,我已经把它停掉了啊,那么咱们现在去重新启动服务器啊, 启动之后呢,那么这样的话,咱们知道 a b c 幺二三是一个正确的情况, a b c 一二三,点击 log in 啊,那你看到这是一个正确的星星,那么我反之给上一个一串错误的密码呢,那肯定怎么办?再次回到咱们的啊,登录啊这个界面, 这总之呢,在咱们这个程序里面给大家说了两个事情,第一个连接 d a o, 要把内裤要添加到哪个地方呢?要添加到内裤目录啊,把它复制过来,然后通过呢,在是 buildpass 里面呢,去 at 这样子把它做一个设置,这是第一个啊,第二个呢,在搜登录的 solid 怎么办?咱们去调度咱们的 d a o 去啊,从上到下,先把业务逻辑先写出来,然后呢再到 d a o 里边去完成 啊,整个的这个处理啊,整个的这个呃业务的代码,比如说获取 connection, 然后呢去创建 prepared student, 然后最后呢去执行查询,看一看这个结果是否正确啊,是否正确。 最后呢还提了一下啊,对于 d a o, 咱们加了一个啊,比较啊,模糊的啊,或者说一个呃投梁换柱的单元测试啊,来确保 d a o 呢是一个正确的啊,因为咱们单元测试呢,严格意义上来讲,应该在家网里面呢,有一个叫兼 unite 啊,那个地方呢,咱们 不想给大家制造太多的困难,所以咱们这边呢就暂时没有去讲这个内容。那好,那这样呢,今天的这个视频啊,就到此结束啊,感谢大家的收看,再见。