<pre id="ff7yo"></pre>

      <form id="ff7yo"><legend id="ff7yo"></legend></form>
        <nav id="ff7yo"><listing id="ff7yo"></listing></nav><nav id="ff7yo"></nav>

        <nav id="ff7yo"><listing id="ff7yo"></listing></nav>
        <small id="ff7yo"></small><nav id="ff7yo"><dd id="ff7yo"></dd></nav>
      1. <nav id="ff7yo"></nav>
          <form id="ff7yo"></form><nav id="ff7yo"></nav>
          <nav id="ff7yo"></nav>
          <sub id="ff7yo"></sub>
          更多課程 選擇中心

          軟件測試培訓
          達內IT學院

          400-111-8989

          軟件測試中的單元測試是什么?單元測試怎么做?

          • 發布:軟件測試培訓
          • 來源:軟件測試問答
          • 時間:2017-11-17 16:03

          一、單元測試

          1. 定義與特點

          單元測試(unit testing):是指對軟件中的最小可測試單元進行檢查和驗證。

          這個定義有點抽象,這里舉幾個單元測試的特性,大家感受一下:一般是一個函數配幾個單元測試、單元測試不應該依賴外部系統、單元測試運行速度很快、單元測試不應該造成測試環境的臟數據、單元測試可以重復運行。

          2. 優點

          單元測試使得我們可以放心修改、重構業務代碼,而不用擔心修改某處代碼后帶來的副作用。

          單元測試可以幫助我們反思模塊劃分的合理性,如果一個單元測試寫得邏輯非常復雜、或者說一個函數復雜到無法寫單測,那就說明模塊的抽象有問題。

          單元測試使得系統具備更好的可維護性、具備更好的可讀性;對于團隊的新人來說,閱讀系統代碼可以從單元測試入手,一點點開始后熟悉系統的邏輯。

          3. 本文要解決的痛點

          單測何時寫?

          如果你的團隊在堅持TDD的風格,那就是在編碼之前寫;如果沒有,也不建議在全部業務代碼編寫完成之后再開始補單元測試。單元測試比較(最)合適的時機是:一塊業務邏輯寫完后,跟著寫幾個單元測試驗證下。

          單測怎么寫?

          分層單測:數據庫操作層、中間件依賴層、業務邏輯層,各自的單元測試各自寫,互相不要有依賴。

          單測運行太慢?

          dao層測試,使用H2進行測試,做獨立的BaseH2Test、獨立的test-h2-applicationContext.xml,只對dao的測試

          service層測試,依賴mockito框架,使用@RunWith(MockitoJUnitRunner.class)注解,就無需加載其他spring bean,具體用法

          對于依賴外部的中間件(例如redis、diamond、mq),在處理單測的時候要注意分開加載和測試,尤其是與dao的測試分開

          二、Spring項目中的單元測試實踐

          我們基于unit-test-demo這個項目進行單元測試的實踐。

          1. dao層單元測試

          最開始寫單測的時候,要連著DEV的數據庫,這時候會有兩個煩惱:網絡有問題的時候單測運行不通過、數據庫里造成臟數據的時候會導致應用程序異常。這里我們選擇H2進行DAO層的單元測試。有如下幾個步驟:

          在resources下新建目錄h2,存放schema.sql和data-prepare-user.sql文件,前者用于保存建表語句,后者用于準備初始數據

          test-data-source.xml

          test-h2-applicationContext.xml


          UserInfoDAOTest

          這個文件是DAO層單元測試的主要內容,我只寫了一個,讀者朋友可以下載代碼自己練習,把剩余的幾個寫了。

          PS:這里我們只有一個DAO,所以spring容器加載就放在這個文件里了,如果DAO多的話,建議抽出一個BaseH2Test文件,這樣所有的DAO單元測試只需要加載一次spring容器。

          2. service層單元測試

          ●Mockito

          Mocktio是一個非常易用的mock框架。開發者可以依靠Mockito提供的簡潔的API寫出漂亮的單元測試。

          Mockito is a mocking framework that tastes really good. It lets you write beautiful tests with a clean & simple API. Mockito doesn’t give you hangover because the tests are very readable and they produce clean verification errors.

          ●UserInfoManagerImplTest

          單元測試,不應該依賴于DAO層的執行邏輯是否正確【否則就是集成測試】,需要假設DAO的行為是什么樣子,然后再看本層的邏輯是否正確。

          這里使用@RunWith(MockitoJUnitRunner.class)修飾當前的單元測試類,如果有多個單元測試類的話,可以考慮抽出一個基礎的BaseBizTest類。

          ●Mockito要點

          MockitoJUnitRunner:用于提供單元測試運行的容器環境

          Mock:用于模擬待測試模塊中依賴的外部組件

          InjectMock:用于標識待測試組件

          org.mockito.Mockito.*:這個類里的方法可以用于指定Mock組件的預期行為,包括異常處理。

          三、總結

          1、單元測試的三個步驟

          準備數據、行為

          測試目標模塊

          驗證測試結果

          2、除了本文中提到的Junit、Mockito、H2,還有很多其他的單元測試框架,例如TestNG、spock等。

          3、在Java Web項目中,controller層一般不寫業務邏輯,也就沒有必要寫單元測試,但是如果要寫,也有辦法,可以參考我之前的文章:在Spring Boot項目中使用Spock框架。

          4、單元測試代碼也是線上代碼,要和業務代碼一樣認真對待,也需要注意代碼和測試數據的復用。

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:一個優秀的軟件測試人員,應該學些什么?
          下一篇:頂級黑客都用什么工具進行安全測試?
          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          陜西省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          神马影院-战旗影院-首播影院-新视觉影院-在线观看中文字幕dvd播放 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>