成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JAVA中單元測試的常用方式

Ryan_Li / 2433人閱讀

摘要:中常用的單元測試工具是老牌測試框架了,也是目前引用最廣泛的一個框架??梢允褂眠m當(dāng)?shù)膯卧獪y試方式,比如可以提供一個測試接口,利用的熱部署功能實現(xiàn)不重啟及時修改代碼。

什么是單元測試
單元測試(英語:Unit Testing)又稱為模塊測試, 是針對程序模塊(軟件設(shè)計的最小單位)來進(jìn)行正確性檢驗的測試工作。程序單元是應(yīng)用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數(shù)、過程等;對于面向?qū)ο缶幊蹋钚卧褪欠椒?,包括基類(超類)、抽象類、或者派生類(子類)中的方法?br>通常來說,程序員每修改一次程序就會進(jìn)行最少一次單元測試,在編寫程序的過程中前后很可能要進(jìn)行多次單元測試,以證實程序達(dá)到軟件規(guī)格書要求的工作目標(biāo),沒有程序錯誤;雖然單元測試不是什么必須的,但也不壞,這牽涉到項目管理的政策決定。
單元測試的優(yōu)點
優(yōu)質(zhì)的單元測試可以保障開發(fā)質(zhì)量和程序的魯棒性。在大多數(shù)互聯(lián)網(wǎng)企業(yè)中開發(fā)工程師在研發(fā)過程中都會頻繁地執(zhí)行測試用例,運行失敗的單測能幫助我們快速排查和定位問題 使問題在被帶到線上之前完成修復(fù)。正如軟件工程界的一條金科玉律----越早發(fā)現(xiàn)的缺陷,其修復(fù)成本越低。一流的測試能發(fā)現(xiàn)未發(fā)生的故障;二流的測試能快速定位故障的發(fā)生點;三流的測試則疲于奔命,一直跟在故障后面進(jìn)行功能回歸。
JAVA中常用的單元測試工具 JUnit/JUnit5

https://junit.org/junit5/

junit是老牌測試框架了,也是目前引用最廣泛的一個框架。當(dāng)前已經(jīng)更新到Junit5,功能更強大。

class StandardTests {

    @BeforeAll
    static void initAll() {
    }

    @BeforeEach
    void init() {
    }

    @Test
    void succeedingTest() {
    }

    @Test
    void failingTest() {
        fail("a failing test");
    }

    @Test
    @Disabled("for demonstration purposes")
    void skippedTest() {
        // not executed
    }

    @Test
    void abortedTest() {
        assumeTrue("abc".contains("Z"));
        fail("test should have been aborted");
    }

    @AfterEach
    void tearDown() {
    }

    @AfterAll
    static void tearDownAll() {
    }

}
assertj

https://assertj.github.io/doc/

一個功能強悍的斷言工具,支持各種斷言方式

// entry point for all assertThat methods and utility methods (e.g. entry)
import static org.assertj.core.api.Assertions.*;

// basic assertions
assertThat(frodo.getName()).isEqualTo("Frodo");
assertThat(frodo).isNotEqualTo(sauron);

// chaining string specific assertions
assertThat(frodo.getName()).startsWith("Fro")
                           .endsWith("do")
                           .isEqualToIgnoringCase("frodo");

// collection specific assertions (there are plenty more)
// in the examples below fellowshipOfTheRing is a List
assertThat(fellowshipOfTheRing).hasSize(9)
                               .contains(frodo, sam)
                               .doesNotContain(sauron);

// as() is used to describe the test and will be shown before the error message
assertThat(frodo.getAge()).as("check %s"s age", frodo.getName()).isEqualTo(33);

// Java 8 exception assertion, standard style ...
assertThatThrownBy(() -> { throw new Exception("boom!"); }).hasMessage("boom!");
// ... or BDD style
Throwable thrown = catchThrowable(() -> { throw new Exception("boom!"); });
assertThat(thrown).hasMessageContaining("boom");

// using the "extracting" feature to check fellowshipOfTheRing character"s names (Java 7)
assertThat(fellowshipOfTheRing).extracting("name")
                               .contains("Boromir", "Gandalf", "Frodo", "Legolas")
// same thing using a Java 8 method reference
assertThat(fellowshipOfTheRing).extracting(TolkienCharacter::getName)
                               .doesNotContain("Sauron", "Elrond");

// extracting multiple values at once grouped in tuples (Java 7)
assertThat(fellowshipOfTheRing).extracting("name", "age", "race.name")
                               .contains(tuple("Boromir", 37, "Man"),
                                         tuple("Sam", 38, "Hobbit"),
                                         tuple("Legolas", 1000, "Elf"));

// filtering a collection before asserting in Java 7 ... 
assertThat(fellowshipOfTheRing).filteredOn("race", HOBBIT)
                               .containsOnly(sam, frodo, pippin, merry);
// ... or in Java 8
assertThat(fellowshipOfTheRing).filteredOn(character -> character.getName().contains("o"))
                               .containsOnly(aragorn, frodo, legolas, boromir);

// combining filtering and extraction (yes we can)
assertThat(fellowshipOfTheRing).filteredOn(character -> character.getName().contains("o"))
                               .containsOnly(aragorn, frodo, legolas, boromir)
                               .extracting(character -> character.getRace().getName())
                               .contains("Hobbit", "Elf", "Man");

// and many more assertions: iterable, stream, array, map, dates (java 7 and 8), path, file, numbers, predicate, optional ...
Mockito

https://site.mockito.org/

一個單元測試中的Mock工具,可以很靈活的創(chuàng)建對象,配合單元測試。

// You can mock concrete classes and interfaces
TrainSeats seats = mock(TrainSeats.class);

// stubbing appears before the actual execution
when(seats.book(Seat.near(WINDOW).in(FIRST_CLASS))).thenReturn(BOOKED);

// the following prints "BOOKED"
System.out.println(seats.book(Seat.near(WINDOW).in(FIRST_CLASS)));

// the following prints "null" because 
// .book(Seat.near(AISLE).in(FIRST_CLASS))) was not stubbed
System.out.println(seats.book(Seat.near(AISLE).in(FIRST_CLASS)));

// the following verification passes because 
// .book(Seat.near(WINDOW).in(FIRST_CLASS)) has been invoked
verify(seats).book(Seat.near(WINDOW).in(FIRST_CLASS));

// the following verification fails because 
// .book(Seat.in(SECOND_CLASS)) has not been invoked
verify(seats).book(Seat.in(SECOND_CLASS));
其他

對于業(yè)務(wù)代碼,有時單元測試并不方便,因為每次啟動成本過高??梢允褂眠m當(dāng)?shù)膯卧獪y試方式,比如可以提供一個測試接口,利用IDE的熱部署功能實現(xiàn)不重啟及時修改代碼。

但是對于非業(yè)務(wù)性代碼,進(jìn)行單元測試時非常有必要的,可以更早的發(fā)現(xiàn)代碼中的問題,同時也可以檢驗程序的解耦性。

良好的代碼設(shè)計在單元測試時會更方便,反之緊耦合的設(shè)計會給單元測試帶來很大的困擾。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77861.html

相關(guān)文章

  • Java單元測試入門

    摘要:三使用介紹通過代碼創(chuàng)建通過注解四常用方法驗證方法沒有被調(diào)用驗證方法被調(diào)用了次方法至少被調(diào)用次方法最多被調(diào)用次備注假如你無法給你程序?qū)憜卧獪y試,那么意味著你的程序結(jié)構(gòu)有問題,需要調(diào)整或重構(gòu)。 Java單元測試入門 什么是單元測試 定義:單元測試是對軟件或程序的基本(最小)組成單元的測試對象:方法、類特點:showImg(https://segmentfault.com/img/bVbcR...

    cfanr 評論0 收藏0
  • 2021年軟件測試工具總結(jié)——單元測試工具

    摘要:單元測試框架作為的標(biāo)準(zhǔn)庫,是其他單元測試框架的基礎(chǔ)??梢院秃团浜鲜褂镁帉憜卧獪y試。官網(wǎng)地址單元測試覆蓋率工具單元測試中還需要用到代碼覆蓋率工具。代碼覆蓋率統(tǒng)計工具用來發(fā)現(xiàn)沒有被測試覆蓋的代碼,完善單元測試的覆蓋率。 在應(yīng)用程序中,單元是具有一個或多個輸入和單個輸出的軟件中最小可測試部分。單元...

    qingshanli1988 評論0 收藏0
  • Java經(jīng)典

    摘要:請注意,我們在聊聊單元測試遇到問題多思考多查閱多驗證,方能有所得,再勤快點樂于分享,才能寫出好文章。單元測試是指對軟件中的最小可測試單元進(jìn)行檢查和驗證。 JAVA容器-自問自答學(xué)HashMap 這次我和大家一起學(xué)習(xí)HashMap,HashMap我們在工作中經(jīng)常會使用,而且面試中也很頻繁會問到,因為它里面蘊含著很多知識點,可以很好的考察個人基礎(chǔ)。但一個這么重要的東西,我為什么沒有在一開始...

    xcold 評論0 收藏0
  • 2018年開發(fā)者生態(tài)體系狀態(tài)調(diào)查報告(第一部分)

    摘要:在年年初,公司通過調(diào)查名開發(fā)者來了解開發(fā)者的生態(tài)狀態(tài),最近,調(diào)查結(jié)果終于整理完畢,以下是得出的結(jié)果。注報告會分多成多個部分,此為第一部分。 在2018年年初,jetbrains公司通過調(diào)查6000名開發(fā)者來了解開發(fā)者的生態(tài)狀態(tài),最近,調(diào)查結(jié)果終于整理完畢,以下是得出的結(jié)果。一、 日常工作1.1)流行語言:今年,使用最受歡迎、最常用與最有前途的語言相較去年沒有變化,最受歡迎的語言是...

    sumory 評論0 收藏0
  • 2018年開發(fā)者生態(tài)體系狀態(tài)調(diào)查報告(第一部分)

    摘要:在年年初,公司通過調(diào)查名開發(fā)者來了解開發(fā)者的生態(tài)狀態(tài),最近,調(diào)查結(jié)果終于整理完畢,以下是得出的結(jié)果。注報告會分多成多個部分,此為第一部分。 在2018年年初,jetbrains公司通過調(diào)查6000名開發(fā)者來了解開發(fā)者的生態(tài)狀態(tài),最近,調(diào)查結(jié)果終于整理完畢,以下是得出的結(jié)果。一、 日常工作1.1)流行語言:今年,使用最受歡迎、最常用與最有前途的語言相較去年沒有變化,最受歡迎的語言是...

    NikoManiac 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<