真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中怎么實現(xiàn)單元測試與集成測試

Java中怎么實現(xiàn)單元測試與集成測試,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)公司主營江津網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件開發(fā)公司,江津h5微信小程序搭建,江津網(wǎng)站營銷推廣歡迎江津等地區(qū)企業(yè)咨詢

Maven測試代碼結(jié)構(gòu)的組織

我們知道在Maven工程結(jié)構(gòu)中“src/test”目錄是專門用于存放測試代碼的,但令人痛苦的是Maven的標準目錄結(jié)構(gòu)只定義了這樣一個測試目錄,也就是說它本身是無法單獨區(qū)分單元測試代碼和集成測試代碼的,這也是為什么很多人會把UT和IT代碼同時寫到"src/test"目錄而導致“mvn  test”難以跑過的原因。

那么有什么辦法可以友好地解決這個問題呢?在接下來的內(nèi)容中我們以Maven構(gòu)建Spring  Boot項目為例來具體演示下在Maven中如何友好地分離UT及IT,具體步驟如下:

1)、首先我們創(chuàng)建一個基于Maven構(gòu)建的Spring Boot項目,代碼結(jié)構(gòu)如下圖所示:

Java中怎么實現(xiàn)單元測試與集成測試

如上圖所示,在規(guī)劃的目錄結(jié)構(gòu)中我們將IT的代碼目錄及資源文件目錄單獨分離在“src/integration-test”目錄下,默認的“src/test”目錄還是作為存放UT代碼的目錄,而Maven在構(gòu)建的過程中默認只運行UT代碼。這樣即便IT代碼由于網(wǎng)絡、環(huán)境等原因無法正常執(zhí)行,但也不至于影響到UT代碼的運行。

2)、創(chuàng)建區(qū)分UT、IT代碼的Maven Profiles文件

默認情況下Maven是無法主動識別“src/test”目錄之外的測試代碼的,所以當我們將IT代碼抽象到"src/integration-test"目錄之后,需要通過編寫Maven  Profiles文件來進行區(qū)分,具體示意圖如下:

Java中怎么實現(xiàn)單元測試與集成測試

如上圖所示,我們可以在與“src”目錄平行創(chuàng)建一個“profiles”的目錄,其中分別用“dev”、“integration-test”目錄中的config.properties文件來進行區(qū)分,其中dev目錄下的config.properties文件的內(nèi)容為:

profile=dev

而integration-test目錄中的config.properties文件則為:

profile=integration-test

3)、通過pom.xml文件配置上述profiles文件生效規(guī)則

為了使得這些profiles文件生效,我們還需要在pom.xml文件中進行相應的配置。具體如下:

                    dev                      true                               dev                          true             false                                 integration-test                      integration-test                          false             true               

上述內(nèi)容先定義了區(qū)分dev及integration-test環(huán)境的的profile信息,接下來在build標簽中定義資源信息及相關plugin,具體如下:

     ${project.artifactId}                   profiles/${build.profile.id}/config.properties                                false             src/main/java                              **/*.properties                 **/*.xml                 **/*.tld                 **/*.yml                                                     true             src/main/resources                              **/*.properties                 **/*.xml                 **/*.tld                 **/*.yml                 **/*.sh                                                      org.springframework.boot             spring-boot-maven-plugin                                        org.codehaus.mojo             build-helper-maven-plugin             3.1.0                                                                    add-integration-test-sources                     generate-test-sources                                              add-test-source                                                                                                                         src/integration-test/java                                                                                                                      add-integration-test-resources                     generate-test-resources                                              add-test-resource                                                                                                                                                          true                                 src/integration-test/resources                                                                      **/*.properties                                                                                                                                                                                  org.apache.maven.plugins             maven-surefire-plugin             2.18                                               ${skip.unit.tests}                                                       **/IT*.java                                                                      org.apache.maven.plugins             maven-failsafe-plugin             2.18                                                   integration-tests                                              integration-test                         verify                                                                   ${skip.integration.tests}                                                                  

到這里我們就完成了基于Maven構(gòu)建的Spring Boot項目的UT及IT代碼目錄的分離配置,此時對UT代碼的執(zhí)行還是通過默認“mvn  test”命令,而集成測試代碼的運行則可以通過如下命令:

mvn clean verify -P integration-test

單元測試代碼示例

通過前面的配置操作就完成了單元測試、集成測試代碼目錄的分離設置。在后續(xù)的開發(fā)過程中只需要將相應的測試代碼寫在對應的測試目錄即可。接下來我們模擬一段業(yè)務邏輯并演示如何編寫其對應的UT代碼。具體如下:

Java中怎么實現(xiàn)單元測試與集成測試

如上圖所示,參考MVC三層規(guī)范,我們編寫了一個接口邏輯,該接口Controller層接收Http請求后調(diào)用Service層進行處理,而Service層處理邏輯時會調(diào)用Dao層操作數(shù)據(jù)庫,并將具體信息插入數(shù)據(jù)庫。

那么我們編寫單元測試(UT)代碼時,針對的是單獨的某個邏輯單元的測試,而不是從頭到位的整個邏輯,它的運行不應該依賴于任何網(wǎng)絡環(huán)境或其他組件,所有依賴的組件或網(wǎng)絡都應該先進行Mock。以單元測試TestServceImpl中的“saveTest”方法為例,其UT代碼編寫如下:

@RunWith(SpringRunner.class) @SpringBootTest(classes = TestServiceImpl.class) @ActiveProfiles("test") public class TestServiceImplTest {      @Autowired     TestServiceImpl testServiceImpl;      @MockBean     TestDao testDao;      @Test     public void saveTest() {         //調(diào)用測試方法         testServiceImpl.saveTest("無敵碼農(nóng)微信公眾號");         //驗證執(zhí)行測試的邏輯中是否調(diào)用過addUser方法         verify(testDao).addUser(any());     } }

如上所示UT代碼,我們UT測試的主要對象為TestServiceImpl類,所以可以在@SpringBootTest注解中進行范圍指定。而@ActiveProfiles("test")則表示代碼中所依賴的系統(tǒng)參數(shù),可以從測試資源目錄resouces/application-test.yml文件中獲得。

單元測試的主要目的是驗證單元代碼內(nèi)的邏輯,對于所依賴的數(shù)據(jù)庫Dao組件并不是測試的范圍,但是沒有該Dao組件對象,UT代碼在執(zhí)行的過程中也會報錯,所以一般會通過@MockBean注解進行組件Mock,以此解決UT測試過程中的代碼依賴問題。此時運行“mvn  test”命令:

Java中怎么實現(xiàn)單元測試與集成測試

單元測試代碼得以正常執(zhí)行!

集成測試代碼示例

在Spring  Boot中UT代碼的編寫方式與IT代碼類似,但是其執(zhí)行范圍是包括了整個上下文環(huán)境。我們以模擬從Controller層發(fā)起Http接口請求為例,來完整的測試整個接口的邏輯,并最終將數(shù)據(jù)存入數(shù)據(jù)庫。具體測試代碼如下:

@RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles("test") public class ITTestControllerTest {      @Autowired     TestController testController;      @Test     public void saveTest() {         testController.saveTest("無敵碼農(nóng)微信公眾號");     } }

可以看到對于集成測試代碼在@SpringBootTest中并沒有指定具體的類,它的默認執(zhí)行范圍為整個應用的上下文環(huán)境。而代碼中的依賴組件由于整個應用上下文都會被啟動,所以依賴上并不會報錯,可以理解為是一個正常啟動的Spring  Boot應用。

需要注意的是由于IT代碼的目錄有獨立的資源配置,所以相關的依賴配置,如數(shù)據(jù)庫等需要在“src/integration-test/resouces/application-test.yml”文件中單獨配置,例如:

spring:  application:     name: springboot-test-demo   #數(shù)據(jù)庫邏輯   datasource:     url: jdbc:MySQL://127.0.0.1:3306/test     username: root     password: 123456     type: com.alibaba.druid.pool.DruidDataSource     driver-class-name: com.mysql.jdbc.Driver     separator: //  server:   port: 8080

此時運行集成測試命令“mvn clean verify -P integration-test”:

Java中怎么實現(xiàn)單元測試與集成測試

關于Java中怎么實現(xiàn)單元測試與集成測試問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。


網(wǎng)站欄目:Java中怎么實現(xiàn)單元測試與集成測試
文章來源:http://weahome.cn/article/ggodje.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部