第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Maven 單元測試

在我們平時開發(fā)的過程中,測試環(huán)節(jié)是永遠不能避免的。那我們?nèi)绾文軌蚩焖俚倪M行單元測試呢,如何更方便的看到測試結(jié)果呢?在這個過程中,Maven 也能夠為我們提供幫助,那我們來看看 Maven 如何在測試環(huán)節(jié)來輔助我們的。

1. 使用 Maven 進行單元測試

1.1 添加測試代碼

這里面我們在 mall-order 模塊中增加生成訂單的方法,這個方法調(diào)用后會生成一個 OrderEntity 對象,里面包括訂單編號(orderNuM)和訂單所有者(orderOwner)兩個字段。(這里我們僅僅是用來模擬單元測試,對業(yè)務(wù)的具體邏輯不做過多糾結(jié))

首先,我們在 mall-order 模塊的 pom.xml 文件中添加需要的依賴。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
</dependency>

添加依賴后,我們在項目中創(chuàng)建 service 目錄和 entity 目錄,分別用于存放項目的服務(wù)層代碼和實體類。

在項目中添加對應(yīng)的 service 和 entity

并且在對應(yīng)的測試目錄中,增加該服務(wù)層代碼的測試類 OrderServiceTest。

完成后,我們可以執(zhí)行該測試用例,來調(diào)試 OrderService 中的 generateOrder 方法。

從調(diào)試結(jié)果來看,我們的方法被成功調(diào)用,并且沒有異常。

1.2 借助 Maven 進行單元測試

后來,隨著我們項目的不斷進行,我們開發(fā)的功能也隨之不斷增多,相應(yīng)的,不同功能的測試用例也在不斷的增多。這個時候,如果單純的靠開發(fā)人員手工去點擊每一個測試用例,這顯然是不合理的。

那么我們就可以借助 Maven 來幫助我們做這件事情,來進行自動化的單元測試。

例如在 mall-order 模塊下, 我們想要執(zhí)行所有的單元測試用例,那么我們只需要進入到該模塊的根目錄下,執(zhí)行 mvn test 命令即可。

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mic.tech:mall-order >-----------------------
[INFO] Building mall-order 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mall-order ---
[INFO] Surefire report directory: D:\code\mall-aggregate\mall-order\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mic.tech.OrderServiceTest
...
Results :

Tests run: 3, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.333 s
[INFO] Finished at: 2020-05-20T23:37:40+08:00
[INFO] ------------------------------------------------------------------------

從執(zhí)行結(jié)果,我們可以看出,一共執(zhí)行了三個測試用例,沒有失敗,也沒有報錯的情況出現(xiàn)。

2. 跳過測試

2.1 指定測試用例進行測試

其實每一項新的操作一般都會伴隨一些問題產(chǎn)生。例如,我們在實際的開發(fā)過程中,有些時候只是改動了一處代碼,但是如果直接執(zhí)行 mvn test 命令的話,會將整個項目的測試用例全部都執(zhí)行一遍,這對于我們來說,是有些得不償失的,沒必要因為一處改動,而去測試其他幾十個或者幾百個測試用例。

那我們應(yīng)該怎么辦呢? 這里我們?yōu)榱搜菔?,寫了兩個測試類,OrderServiceTestOrderService2Test,其中第一個類中,有兩個測試用例,第二個類中,只有一個測試用例。

這時候,我們修改了第二個類中測試用例對應(yīng)的方法,需要重新進行單元測試。我們可以直接執(zhí)行命令:mvn test -Dtest=OrderService2Test

[INFO] Scanning for projects...
[INFO]
[INFO] ----------------------< com.mic.tech:mall-order >-----------------------
[INFO] Building mall-order 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ...
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mall-order ---
[INFO] Surefire report directory: D:\code\mall-aggregate\mall-order\target\surefire-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.mic.tech.OrderService2Test
...
Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.261 s
[INFO] Finished at: 2020-05-21T22:17:47+08:00
[INFO] ------------------------------------------------------------------------

從結(jié)構(gòu)來看,我們這里只執(zhí)行了第二個測試類中的測試用例。

2.2 跳過測試

換到另外一個場景,構(gòu)建項目的時候。在平時的開發(fā)過程中,我們經(jīng)常會使用mvn package構(gòu)建項目,但是如果這個項目比較龐大,測試用例會非常多,那么執(zhí)行測試用例的過程就會非常耗時。那怎么辦呢,test 階段在 package 階段之前,如果直接執(zhí)行 package 階段,test 階段勢必會被執(zhí)行到。

這個時候我們可以跳過測試來構(gòu)建項目。(當然,這樣的做法是不被建議的)

在執(zhí)行構(gòu)建命令的時候,添加參數(shù)來指定跳過測試即可,mvn package -DskipTests 或者 mvn package -Dmaven.test.skip=true。

這兩個命令雖然都能夠在構(gòu)建項目的時候跳過測試,但還是有些區(qū)別的。

  • -DskipTests: 會編譯測試類;
  • -Dmaven.test.skip=true: 不會編譯測試類。

3. 測試報告

Maven 的默認配置中,會在 target\surefire-reports 目錄下生成測試報告。

我們執(zhí)行 mvn clean test,就可以觀察到該目錄生成。

我們可以在 txt 格式的文檔中看到生成的測試報告。這里的測試報告基本上和控制臺輸出的內(nèi)容是類似的。

大家可能也注意到了,我們在執(zhí)行測試用例的時候,同時生成了兩種類型的文件,一種是 txt 格式,另一個則是 XML 格式。

  • txt 格式: 為了讓執(zhí)行測試用例的開發(fā)者更加直觀的看到測試用例的運行結(jié)果;
  • XML格式: 更多的是為了支持其他工具的解析。

4. maven-surefire-plugin

說了這么多,其實 Maven 之所以可以幫助我們自動執(zhí)行測試用例,還是依靠 maven-surefire-plugin 插件來實現(xiàn)的。在學(xué)過 Maven 的生命周期之后,我們知道一個插件的功能都是通過目標來實現(xiàn)的,而不同的目標則會和生命周期中的不同階段進行綁定。這里,生命周期中的 test 階段就是和 maven-surefire-plugin 插件的 test 目標進行綁定的。

對于 Maven 來說,我們可以不指定或者顯示的聲明該插件。

在顯示聲明的時候,我可以通過添加 configuration 的方式來實現(xiàn)剛剛執(zhí)行命令的效果。

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
            	<skipTests>true</skipTests>
            </configuration>
        </plugin>
    </plugins>
</build>

例如我們在 configuration 中添加 skipTests 節(jié)點,則可以默認跳過測試。當我們再次執(zhí)行mvn package命令構(gòu)建項目的時候,test 階段是不會被執(zhí)行的。

當然,我們也可以在 configuration 中添加 include 節(jié)點和 exclude 節(jié)點,來控制執(zhí)行的測試類。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.17</version>
    <configuration>
        <includes>
        	<include>**/OrderServiceTest.java</include>
        </includes>
        <excludes>
        	<exclude>**/OrderService2Test.java</exclude>
        </excludes>
    </configuration>
</plugin>

此時,我們再次執(zhí)行mvn test的時候會發(fā)現(xiàn)只有OrderServiceTest.java類中的測試用例被執(zhí)行了。

5. 小結(jié)

在本節(jié)的學(xué)習(xí)中,我們簡單介紹了如何編寫測試用例,Maven 如何自動的執(zhí)行測試用例,以及在執(zhí)行測試用例的過程中的一些技巧,比如跳過測試。最后我們還介紹了 maven-surefire-plugin 的簡單使用。通過本節(jié)的學(xué)習(xí),我們可以使用 Maven 輕松的進行自動化測試。