<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Springboot整合Junit5 常用注解

          共 6196字,需瀏覽 13分鐘

           ·

          2021-03-15 09:26

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          76套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          @Test

          在Springboot2.0版本之后,Junit就是5.幾的版本,在方法上添加@Test即可

          @Test
          void fun1(){
              int res = 1+1;
              Assertions.assertEquals(2,res);
              System.out.println(123);
          }


          @BeforeEach & @AfterEach

          每執(zhí)行一個(gè)@Test就會(huì)執(zhí)行一次

           @BeforeEach
              void before(){
                  System.out.println("before");
              }

              @AfterEach
              void after(){
                  System.out.println("after");
              }

              @Test
              void fun1(){
                  int res = 1+1;
                  Assertions.assertEquals(2,res);
                  System.out.println(123);
              }
              @Test
              void fun2(){

                  System.out.println(456);
              }


          @BeforeAll & @AfterAll

          無(wú)論有多少個(gè)@Test都只執(zhí)行一次,且@BeforeAll & AfterAll下的方法必須是靜態(tài)方法

          @BeforeAll
          static void init(){
              System.out.println("init");
          }

          @AfterAll
          static void destory(){
              System.out.println("destory");
          }

          @BeforeEach
          void before(){
              System.out.println("before");
          }

          @AfterEach
          void after(){
              System.out.println("after");
          }

          @Test
          void fun1(){
              int res = 1+1;
              Assertions.assertEquals(2,res);
              System.out.println(123);
          }
          @Test
          void fun2(){

              System.out.println(456);
          }

          @SpringBootTest

          在SpringBoot項(xiàng)目中,我們?cè)跍y(cè)試類中new 一個(gè)類時(shí),這個(gè)類可能同時(shí)會(huì)涉及到其他的Bean,而原來(lái)的@Test并不會(huì)涉及到Springboot的上下文,所以我們?cè)赟pringBoot項(xiàng)目中編寫(xiě)測(cè)試類時(shí),會(huì)在類上添加@SpringBootTest,細(xì)心的小伙伴會(huì)發(fā)現(xiàn)在我們創(chuàng)建項(xiàng)目選擇 Spring Initializr創(chuàng)建SpringBoot項(xiàng)目時(shí),目錄下會(huì)有一個(gè)Test文件,就會(huì)看到自動(dòng)創(chuàng)建好的Test類上帶有@SpringBootTest


          同時(shí)也能配合@Autowired的注入

          @SpringBootTest  //能夠初始化springboot的上下文,防止new Serv01 的對(duì)象同時(shí)依賴其他的Bean
          public class Test2 {

              @Autowired
              Serv01 serv01;

              @Test
              void t1(){
                  int add = serv01.add(1, 1);
                  Assertions.assertEquals(2,add);
                  System.out.println(11);

              }
          }


          當(dāng)然,運(yùn)行這個(gè)帶@SpringBootTest的測(cè)試用例,也會(huì)啟動(dòng)我們的SpringBoot項(xiàng)目


          @MockBean

          通過(guò)mock來(lái)做到一個(gè)模擬,假如我們的測(cè)試需要寫(xiě)入數(shù)據(jù)庫(kù),可能會(huì)造成一些不可挽回的操作


          我們對(duì)這些危險(xiǎn)的操作會(huì)使用mock來(lái)進(jìn)行一個(gè)模擬


          我們來(lái)看下面的代碼

          @SpringBootTest  //能夠初始化springboot的上下文,防止new Serv01 的對(duì)象同時(shí)依賴其他的Bean
          public class Test2 {

              @MockBean
              Serv01 serv01;

              @Test
              void t1(){
                  int add = serv01.add(1, 1);
                  Assertions.assertEquals(2,add);
                  System.out.println(11);

              }
          }

          通過(guò)斷點(diǎn)得知 變量add 竟然等于0


          原因就是我們?cè)赟pringBoot上下文的serv01的這個(gè)bean已經(jīng)被我們的mock替換掉了,因?yàn)槲覀兊膍ock并沒(méi)有任何指定操作,所以我們的int變量add 只會(huì)有默認(rèn)值 0


          我們對(duì)mock添加一些指定操作

          @SpringBootTest
          public class Test2 {

              @MockBean
              Serv01 serv01;

              @Test
              void t1(){
                  when(serv01.add(1,1)).thenReturn(3);
                  int add = serv01.add(1, 1);
                  Assertions.assertEquals(2,add);
                  System.out.println(11);

              }
          }




          我們?cè)俅涡薷拇a,在Serv01添加sub的方法,然后運(yùn)行測(cè)試



          我們可以發(fā)現(xiàn)在我們指定規(guī)則的add方法,得出的結(jié)果是3,而未指定規(guī)則的sub方式則默認(rèn)int變量為0


          如果說(shuō)我們想讓sub按照原來(lái)的方式進(jìn)行測(cè)試,不想被@MockBean影響,我們可以使用@SpyBean


          @SpyBean

          是介于@MockBean和@Autowired之間,在配置了規(guī)則的方法就按配置規(guī)則的執(zhí)行,沒(méi)有配置的就按原來(lái)的方法執(zhí)行測(cè)試



          如果我們?cè)趧?chuàng)建一個(gè)serv02,讓serv01調(diào)用serv02的方法,運(yùn)行的結(jié)果還是一樣嗎?

          @Service
          public class Serv02 {
              int add2(int a, int b){
                  return a+b;
              }
          }

          @Service
          public class Serv01 {

              @Autowired
              Serv02 serv02;

              public int add(int a,int b){
                  return serv02.add2(a,b);
              }

              public int sub(int a,int b){
                  return a-b;
              }
          }

          @SpringBootTest  //能夠初始化springboot的上下文,防止new Serv01 的對(duì)象同時(shí)依賴其他的Bean
          public class Test2 {

              @SpyBean
              Serv01 serv01;

              @MockBean
              Serv02 serv02;

              @Test
              void t1(){
                  when(serv01.add(1,1)).thenReturn(3);
                  int add = serv01.add(1, 1);
                  int sub = serv01.sub(2,1);
                  Assertions.assertEquals(3,add);
                  Assertions.assertEquals(1,sub);
                  System.out.println(11);

              }
          }


          運(yùn)行成功,即使我們mock的是serv02,通過(guò)serv01調(diào)用的add方法調(diào)用serv02的add2方法,照樣運(yùn)行成功!


          最后按照測(cè)試規(guī)范,我們一般一個(gè)類對(duì)應(yīng)一個(gè)test,但也可能出現(xiàn)一個(gè)類對(duì)應(yīng)多個(gè)test,因?yàn)榭赡艹霈F(xiàn)test調(diào)用多個(gè)類的情況!

          ————————————————

          版權(quán)聲明:本文為CSDN博主「小爽帥到拖網(wǎng)速」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

          原文鏈接:

          https://blog.csdn.net/weixin_46195957/article/details/114273530




          鋒哥最新SpringCloud分布式電商秒殺課程發(fā)布

          ??????

          ??長(zhǎng)按上方微信二維碼 2 秒





          感謝點(diǎn)贊支持下哈 

          瀏覽 53
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文精品无码视频 | 91在线无码精品秘 少萝 | 国产精品老熟女视频一区二区 | 操屄视频在线免费观看 | 香蕉插逼 |