1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            91AV三级影院 | 人人鲁人人爱 | 丰满人妻一区二区三区在线 | 午夜啪啪剧场 | 亚洲中文免费视频 | 国产精品婷婷自产拍在线观看 | 总裁大手伸进内衣揉捏小说 | 五月丁香视频首页 | 久久93| 五月激情丁香婷婷 |