• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 你真的會寫 單元測試嗎?TDD初體驗

    發表于:2019-11-18來源:cnblogs作者:李佳霖i點擊數: 標簽:
    昨天讀到了一篇文章,講的是TDD,即Test-Driven Development,測試驅動開發。大體意思是,它要求在編寫某個功能的代碼之前先編寫測試代碼,然后只編寫使測試通過的功能代碼,通過測試
    前言:
      昨天讀到了一篇文章,講的是TDD,即Test-Driven Development,測試驅動開發。大體意思是,它要求在編寫某個功能的代碼之前先編寫測試代碼,然后只編寫使測試通過的功能代碼,通過測試來推動整個開發的進行。這有助于編寫簡潔可用和高質量的代碼,并加速開發過程。
      初讀之時,瞬間感受到了震撼,感覺和自己之前的開發流程全都不一樣,之前是由始至終,而這種思想確實以終為始。后來一查這種思想早在前幾年甚至前幾十年就被提出了,進而被廣泛運用到了敏捷開發中??磥硎亲约汗侣涔崖劻?,于是我準備將這種思想用到今后的開發中,要做的第一件事,就是溫習如何寫用例。
    為什么是溫習?
      早在實習的時候,我們研發組就有寫用例的習慣,但是隨著開發逐漸熟悉,這種習慣不知不覺就被丟棄了,有頁面的點點點,沒頁面的看邏輯。相信有很多人也像我一樣,不知不覺就把這項技能丟棄了,接下來就讓我們一起,去重新撿起這項技能。
    工具選擇
    Junit
    對于一個Java開發工程師來說,一提到寫單測,我們最先想到的,一定是Junit。下面是maven坐標
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>



    用Junit我們可以快速的,簡潔的用注解進行單元測試。
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "classpath:conf/core/*.xml")
    public class ObjTest {

      @Test
      public void testFunc(){
         //todo test         
      }
    }



    這里要注意的是@ContextConfiguration注解中的路徑是Spring配置文件的位置。測試的方法必須是public的,且沒有返回值。
    mockito
    mockito是一個用于模擬對象的工具,我認為他也是測試工作中必不可少的一部分,詳細的介紹我推薦可以看一下:
    人生苦短,我用Mockito https://zhuanlan.zhihu.com/p/59275373
    比較不錯的入門案例,它的maven坐標地址為:
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>



    Mock這種測試方法, 對比傳統的Junit測試,有如下好處:
    不用每次測試的是時候,都初始化Spring容器,采用Mock的方式模擬對象,效率高
    對象間的依賴關系,可以用Mock去表達,同時,我們不關心的部分,我們都可以用Mock的方式代替(比如對象A引用對象B的某某方法,但是我們不關系對象B方法實現,只想借助方法,這個時候就可以Mock)
    可以應對復雜的測試環境,比如方法調用順序、方法調用次數等等。
    以下是Mock的一個小案例:
    @RunWith(MockitoJUnitRunner.class)
    public class MockitoTest {
        /**
         * mock對象
         */
        @Mock
        List<String> mockedList;

        @Before
        public void setUp() {
            MockitoAnnotations.initMocks(this);
        }

        @Test
        public void testMock() {
            // mock對象行為
            Mockito.when(mockedList.get(0)).thenReturn("one");
            Assert.assertEquals("one", mockedList.get(0));
            // 僅僅是mock了對象的行為,實際上列表還是空的
            Assert.assertEquals(0, mockedList.size());

            //驗證mock對象的get方法被調用過,且調用時的參數是0
            Mockito.verify(mockedList).get(0);
        }
    }

    這里在使用@Mock的時候,必須事先調用MockitoAnnotations.initMocks(this),且使用@RunWith(MockitoJUnitRunner.class)
    Jacoco
    JaCoCo是一個開源的覆蓋率工具,支持多種覆蓋率的統計,其中包括:
    行覆蓋率:度量被測程序的每行代碼是否被執行,判斷標準行中是否至少有一個指令被執行。

    原文轉自:https://www.cnblogs.com/nedulee/p/11863605.html

    ...
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>