SpringBoot单元测试JUnit的实践_第1页
SpringBoot单元测试JUnit的实践_第2页
SpringBoot单元测试JUnit的实践_第3页
SpringBoot单元测试JUnit的实践_第4页
SpringBoot单元测试JUnit的实践_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringBoot单元测试JUni的实践一、介绍JUni是一款优秀的开源J单元测试框架,也是目前使用率最高最流行的测试框架,开发工具i和对JUni都有很好的支持,JUni主要用于白盒测试和回归测试。or*白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的;•回归测试:软件或环境修复或更正后的再测试;•单元测试:最小粒度的测试,以测试某个功能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细二、JUni使用开发环境:SpringBootJUnitn检测JUni依赖如果是SpringBo项目默认已经加入了JUni框架支持,可在po中查看:pendency>groupId>org.springframework.boot</groupartifactId>spring-boot-starter-test</artiscope>test</scope>ependency>如果项目中没有添加JUni依赖,可参照如上代码,手动添加。基础使用简单的测试代码如下:@RunWith(SpringRunner.cla@SpringBootTestpilassSimpleTestpivoiddoTest()intnum=newIntegert.assertEqual在测试类中邮件运行项目,效果如下:OSimjJeresljdvaxpachagecem.exansJle.redi^;iinportcom.surcn~离.apache・ernaLo-perations.Stringincportorgujmutinfiortore-junlt・Testliriiortorg_junit.rum^r.Run*lthimportorg,springframework・boot・test・context.SprlngBootlesl,iqportMg,springframework・t^-st・contest・SpringRuruiei1.®Ruiffiih(SpriiigRurtiier.cl勢3®SptingBootr4stpublic:classSiix>leTest{®TesipublicvoiddoTest()(intiiLunnewInteger(value:1).Assort.吕雪号arfEqmi雪(hl血actusl:1);}1SimpleTtttRun:STmpl^TwtdoTestTestspa5&eJ:1af1test1SJjtieTestspa5&eJ:1af1test1SJjtie'▼©Smp1cT«tmpk.rc-dia)从控制台可以看出测试通过了。2.3注解说明2.3.1注解列表@RunWith:标识为JUnit的运行环境;@SpringBootTest:获取启动类、加载配置,确定装载SpringBoot;@Test:声明需要测试的方法;・@BeforeClass:针对所有测试,只执行一次,且必须为staticvoid;・@AfterClass:针对所有测试,只执行一次,且必须为staticvoid;・@Before:每个测试方法前都会执行的方法;・@After:每个测试方法前都会执行的方法;-@Ignore:忽略方法;2.3.2超时测试代码如下,给Test设置timeout属性即可,时间单位为毫秒:@Test(timeout=1000)2.4断言测试断言测试也就是期望值测试,是单元测试的核心也就是决定测试结果的表达式,Assert对象中的断言方法:・Assert.assertEquals对比两个值相等Assert.assertNotEquals对比两个值不相等Assert.assertSame对比两个对象的引用相等Assert.assertArrayEquals对比两个数组相等Assert.assertTrue验证返回是否为真Assert.assertFlase验证返回是否为假Assert.assertNull验证null-Assert.assertNotNull验证非null代码示例如下:@TestpublicvoiddoTest(){String]]string1={"1","2"};String]]string2=stringl;String]]string3={"1","2"};Assert.assertEquals(string1,string2);Assert.assertEquals(string2,string3);Assert.assertSame(string1,string2);Assert.assertSame(string2,string3);〃验证不通过,string2、string3指向的引用不同}Web模拟测试在SpringBoot项目里面可以直接使用JUnit对web项目进行测试,Spring提供了"TestRestTemplate'对象,使用这个对象可以很方便的进行模拟请求。Web测试只需要进行两步操作:在@SpringBootTest注解上设置"ebEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT"随机端口;使用TestRestTemplate进行post或get请求;示例代码如下:@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)publicclassUserControllerTest{@AutowiredprivateTestRestTemplaterestTemplate;@TestpublicvoidgetName(){Stringname=restTemplate.getForObject("/name",String.class);System.out.println(name);Assert.assertEquals("Adam",name);}}其中getForObject的含义代表执行get请求,并返回Object结果,第二个参数设置返回结果为String类型,更多的请求方法:-getForEntity:Get请求,返回实体对象(可以是集合);・postForEntity:Post请求,返回实体对象(可以是集合);-postForObject:Post请求,返回对象;数据库测试在测试数据操作的时候,我们不想让测试污染数据库,也是可以实现的,只需要添加给测试类上添加@Transactional'即可,这样既可以测试数据操作方法,又不会污染数据库了。示例代码如下:@Test@TransactionalpublicvoidsaveTest(){Useruser=newUser();user.setName("Adam");user.setAge(19);user.setPwd("123456");userRepository.save(user);System.out.println("userId:"+user.getId());Assert.assertTrue(user.getId()>0);}执行效果如下:VTestifras^iLetLP'jblicr«-ldsaTcIcst(S[Useeus由tlikwUset'yustTrsttNeiwC).user.(19);usee.setPwilC12345-6T),MsnrRtpoiil^ry9s舉亍・〔懾聖rl,Systmunut.[:rLntln(ieqfIdl'*ij^er.E#tId:Jas^eriC^iEJe1'...nrhhsff:uaer.getId\):{)),]TjUs*rCentro^lerTM4:mwTwIiI…UseiC<intrdlerT«t•+(i-iteq总*他”si:F总Lk^tCd^MffiJIvrTM.4i'ri^nrijhiJI^.C.ipr'in^hcnE.wwl?^54Em<01%gpj*ore.sprO5-O&201护曲09-062O18-O9-O&ZOlfl-CrgMHibEinate:2©lS-0ft-O6Hib-ciiMto:jssi:Ld:Za|2018-05-062Q1S-Q9-O&沖1护〔倂血2O18-D9-D6J016-W-06我们可以看到Id有了,也测试通过了,说明数据是添加是正常的,但查看数据库发现数据里面是没有这条数据的。如果把"@Transactional"去掉的话,数据库就会正常插入了。Idea快速开启测试在Idea里面可以快速的添加测试的方法,只需要在要测试的类里面右键选择GoTo”点击“Test”,选择你需要测试的代码,点击生成即可,如果是Windows用户可以使用默认快捷键'Ctrl+Shift+T”,效果如下图:CopyRelerenceClri+Aft+Shiftf-C□ParfeCiHA'PartifBorriiHislop,-,Ctri+Shifti-VPa&teSFmple&ri+Alt+ShifthVColuin"SrlrttionModeAktShift+lnser!Find山“gesAlt+F7Exactor►FoldingAnal^e►GoTd卜JumptoNaxtigalionB-ar凶t+HOMEGeneral*,,,Alt+命S4r2ecfaratonUrMF.£ccmpie'UsterCoffrlLrQlletfJava"Sh-ow1FillExpl&rerBOpenfnTermiralCld+Shilt+FSig:ple-menlalicn(fr)[ypeDezl-aratiarperClassQrli-AlUrflQr1+ShiftsBQrkllTf&tMSWft+TLocalHistory►JComziarewthClipboardfileEpco^ingKDi^g-aw0Addto.gitignorefie&Addtd.^iti^nOrefie(uni'jrore:►WebServices0OpenonGkhluibOCrea:eGQQCreateTestXQQCreateTestXTestinglibreary;0JUnit4Classname:User^ontrollerTest]Superclass:QQCreateTestXDestinationpackage:com.exaTiple.redisxontrollerDestinationpackage:uenerate:setUpf®Berfcretear2own/@AfterGeneratetes:rnethadsfor:✓Showinheritedmetho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论