2024軟件測(cè)試面試刷題,這個(gè)小程序(永久刷題),靠它快速找到工作了?。ㄋ㈩}APP的天花板)_軟件測(cè)試刷題小程序-CSDN博客文章瀏覽閱讀2.5k次,點(diǎn)贊85次,收藏11次。你知不知道有這么一個(gè)軟件測(cè)試面試的刷題小程序。里面包含了面試常問(wèn)的軟件測(cè)試基礎(chǔ)題,web自動(dòng)化測(cè)試、app自動(dòng)化測(cè)試、接口測(cè)試、性能測(cè)試、自動(dòng)化測(cè)試、安全測(cè)試及一些常問(wèn)到的人力資源題目。最主要的是他還收集了像阿里、華為這樣的大廠面試真題,還有互動(dòng)交流板塊……_軟件測(cè)試刷題小程序https://blog.csdn.net/AI_Green/article/details/134931243?spm=1001.2014.3001.5502很多初學(xué)編程的同學(xué)都會(huì)認(rèn)為 “程序員的工作只有開發(fā)新功能,功能做完了就完事兒”。但其實(shí)不然,保證程序的正常運(yùn)行、提高程序的穩(wěn)定性和質(zhì)量也是程序員的核心工作。
之前給大家分享過(guò)企業(yè)項(xiàng)目的完整開發(fā)流程,其中有一個(gè)關(guān)鍵步驟叫 “單元測(cè)試”,這篇文章就來(lái)聊聊程序員如何編寫單元測(cè)試吧。
什么是單元測(cè)試?
單元測(cè)試(Unit Testing,簡(jiǎn)稱 UT)是軟件測(cè)試的一種,通常由開發(fā)者編寫測(cè)試代碼并運(yùn)行。相比于其他的測(cè)試類型(比如系統(tǒng)測(cè)試、驗(yàn)收測(cè)試),它關(guān)注的是軟件的 最小 可測(cè)試單元。
什么意思呢?
假如我們要實(shí)現(xiàn)用戶注冊(cè)功能,可能包含很多個(gè)子步驟,比如:
- 校驗(yàn)用戶輸入是否合法
- 校驗(yàn)用戶是否已注冊(cè)
- 向數(shù)據(jù)庫(kù)中添加新用戶
其中,每個(gè)子步驟可能都是一個(gè)小方法。如果我們要保證用戶注冊(cè)功能的正確可用,那么就不能只測(cè)試注冊(cè)成功的情況,而是要盡量將每個(gè)子步驟都覆蓋到,分別針對(duì)每個(gè)小方法做測(cè)試。比如輸入各種不同的賬號(hào)密碼組合來(lái)驗(yàn)證 “校驗(yàn)用戶輸入是否合法” 這一步驟在成功和失敗時(shí)的表現(xiàn)是否符合預(yù)期。
同理,如果我們要開發(fā)一個(gè)很復(fù)雜的系統(tǒng),可能包含很多小功能,每個(gè)小功能都是一個(gè)單獨(dú)的類,我們也需要針對(duì)每個(gè)類編寫單元測(cè)試。因?yàn)橹挥斜WC每個(gè)小功能都是正確的,整個(gè)復(fù)雜的系統(tǒng)才能正確運(yùn)行。
單元測(cè)試的幾個(gè)核心要點(diǎn)是:
- 最小化測(cè)試范圍:?jiǎn)卧獪y(cè)試通常只測(cè)試代碼的一個(gè)非常小的部分,以確保測(cè)試的簡(jiǎn)單和準(zhǔn)確。
- 自動(dòng)化:?jiǎn)卧獪y(cè)試應(yīng)該是自動(dòng)化的,開發(fā)人員可以隨時(shí)運(yùn)行它們來(lái)驗(yàn)證代碼的正確性,特別是在修改代碼后。而不是每次都需要人工去檢查。
- 快速執(zhí)行:每個(gè)單元測(cè)試的執(zhí)行時(shí)間不能過(guò)長(zhǎng),應(yīng)該盡量做到輕量、有利于頻繁執(zhí)行。
- 獨(dú)立性:每個(gè)單元測(cè)試應(yīng)該獨(dú)立于其他測(cè)試,不依賴于外部系統(tǒng)或狀態(tài),以確保測(cè)試的可靠性和可重復(fù)性。
為什么需要單元測(cè)試?
通過(guò)編寫和運(yùn)行單元測(cè)試,開發(fā)者能夠快速驗(yàn)證代碼的各個(gè)部分是否按照預(yù)期工作,有利于保證系統(tǒng)功能的正確可用,這是單元測(cè)試的核心作用。
此外,單元測(cè)試還有很多好處,比如:
1)改進(jìn)代碼:編寫單元測(cè)試的過(guò)程中,開發(fā)者能夠再次審視業(yè)務(wù)流程和功能的實(shí)現(xiàn),更容易發(fā)現(xiàn)一些代碼上的問(wèn)題。比如將復(fù)雜的模塊進(jìn)一步拆解為可測(cè)試的單元。
2)利于重構(gòu):如果已經(jīng)編寫了一套可自動(dòng)執(zhí)行的單元測(cè)試代碼,那么每次修改代碼或重構(gòu)后,只需要再自動(dòng)執(zhí)行一遍單元測(cè)試,就知道修改是否正確了,能夠大幅提高效率和項(xiàng)目穩(wěn)定性。
3)文檔沉淀:編寫詳細(xì)的單元測(cè)試本身也可以作為一種文檔,說(shuō)明代碼的預(yù)期行為。
魚皮以自己的一個(gè)實(shí)際開發(fā)工作來(lái)舉例單元測(cè)試的重要性。我曾經(jīng)編寫過(guò)一個(gè) SQL 語(yǔ)法解析模塊,需要將 10000 多條鏈?zhǔn)秸{(diào)用的語(yǔ)法轉(zhuǎn)換成標(biāo)準(zhǔn)的 SQL 語(yǔ)句。但由于細(xì)節(jié)很多,每次改進(jìn)算法后,我都不能保證轉(zhuǎn)換 100% 正確,總會(huì)人工發(fā)現(xiàn)那么幾個(gè)錯(cuò)誤。所以我編寫了一個(gè)單元測(cè)試來(lái)自動(dòng)驗(yàn)證解析是否正確,每次改完代碼后執(zhí)行一次,就知道解析是否完全成功了。大幅提高效率。
所以無(wú)論是后端還是前端程序員,都建議把編寫單元測(cè)試當(dāng)做一種習(xí)慣,真的能夠有效提升自己的編碼質(zhì)量。
如何編寫單元測(cè)試?
以 Java 開發(fā)為例,我們來(lái)學(xué)習(xí)如何編寫單元測(cè)試。
Java 開發(fā)中,最流行的單元測(cè)試框架當(dāng)屬 JUnit 了,它提供了一系列的類和方法,可以幫助我們快速檢驗(yàn)代碼的行為。
1、引入 JUnit
首先我們要在項(xiàng)目中引入 JUnit,演示 2 種方式:
Maven 項(xiàng)目引入
在 pom.xml 文件中引入 JUnit 4 的依賴:
<dependency>
????<groupId>junit</groupId>
????<artifactId>junit</artifactId>
????<version>4.13.2</version>
????<scope>test</scope>
</dependency>
Spring Boot 項(xiàng)目引入
如果在 Spring Boot 中使用 JUnit 單元測(cè)試,直接引入 spring-boot-starter-test 包即可:
<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-test</artifactId>
????<scope>test</scope>
</dependency>
然后會(huì)自動(dòng)引入 JUnit Jupiter,它是 JUnit 5(新版本)的一部分,提供了全新的編寫和執(zhí)行單元測(cè)試的方式,更靈活易用。不過(guò)學(xué)習(xí)成本極低,會(huì)用 JUnit 4,基本就會(huì)用 JUnit Jupiter。
2、編寫單元測(cè)試
編寫一個(gè)單元測(cè)試通常包括三個(gè)步驟:準(zhǔn)備測(cè)試數(shù)據(jù)、執(zhí)行要測(cè)試的代碼、驗(yàn)證結(jié)果。
一般來(lái)說(shuō),每個(gè)類對(duì)應(yīng)一個(gè)單元測(cè)試類,每個(gè)方法對(duì)應(yīng)一個(gè)單元測(cè)試方法。
編寫 JUnit 單元測(cè)試
比如我們要測(cè)試一個(gè)計(jì)算器的求和功能,示例代碼如下:
import?org.junit.Test;
import?org.junit.Assert;
public?class?CalculatorTest?{
????//?通過(guò)?Test?注解標(biāo)識(shí)測(cè)試方法
????@Test
????public?void?testAdd()?{
????????//?準(zhǔn)備測(cè)試數(shù)據(jù)
????????long?a?=?2;
????????long?b?=?3;
????????
????????//?執(zhí)行要測(cè)試的代碼
????????Calculator?calculator?=?new?Calculator();
????????int?result?=?calculator.add(2,?3);
????????
????????//?驗(yàn)證結(jié)果
????????Assert.assertEquals(5,?result);
????}
}
上述代碼中的 Assert 類是關(guān)鍵,提供了很多斷言方法,比如 assertEquals(是否相等)、assertNull(是否為空)等,用來(lái)對(duì)比程序?qū)嶋H輸出的值和我們預(yù)期的值是否一致。
如果結(jié)果正確,會(huì)看到如下輸出:
如果結(jié)果錯(cuò)誤,輸出如下,能夠清晰地看到執(zhí)行結(jié)果的差異:
Spring Boot 項(xiàng)目單測(cè)
如果是 Spring Boot 項(xiàng)目,我們經(jīng)常需要對(duì) Mapper 和 Service Bean 進(jìn)行測(cè)試,則需要使用 @SpringBootTest
注解來(lái)標(biāo)識(shí)單元測(cè)試類,以開啟對(duì)依賴注入的支持。
以測(cè)試用戶注冊(cè)功能為例,示例代碼如下:
import?org.junit.jupiter.api.Assertions;
import?org.junit.jupiter.api.Test;
import?org.springframework.boot.test.context.SpringBootTest;
import?javax.annotation.Resource;
@SpringBootTest
public?class?UserServiceTest?{
????@Resource
????private?UserService?userService;
????@Test
????void?userRegister()?{
????????//?準(zhǔn)備數(shù)據(jù)
????????String?userAccount?=?"yupi";
????????String?userPassword?=?"";
????????String?checkPassword?=?"123456";
????????//?執(zhí)行測(cè)試
????????long?result?=?userService.userRegister(userAccount,?userPassword,?checkPassword);
????????//?驗(yàn)證結(jié)果
????????Assertions.assertEquals(-1,?result);
????????//?再準(zhǔn)備一組數(shù)據(jù),重復(fù)測(cè)試流程
????????userAccount?=?"yu";
????????result?=?userService.userRegister(userAccount,?userPassword,?checkPassword);
????????Assertions.assertEquals(-1,?result);
????}
}
3、生成測(cè)試報(bào)告
如果系統(tǒng)的單元測(cè)試數(shù)量非常多(比如 1000 個(gè)),那么只驗(yàn)證某個(gè)單元測(cè)試用例是否正確、查看單個(gè)結(jié)果是不夠的,我們需要一份全面完整的單元測(cè)試報(bào)告,便于查看單元測(cè)試覆蓋度、評(píng)估測(cè)試效果和定位問(wèn)題。
測(cè)試覆蓋度 是衡量測(cè)試過(guò)程中被測(cè)試到的代碼量的一個(gè)指標(biāo),一般情況下越高越好。測(cè)試覆蓋度 100% 表示整個(gè)系統(tǒng)中所有的方法和關(guān)鍵語(yǔ)句都被測(cè)試到了。
下面推薦 2 種生成單元測(cè)試報(bào)告的方法。
使用 IDEA 生成單測(cè)報(bào)告
直接在 IDEA 開發(fā)工具中選擇 Run xxx with Coverage
執(zhí)行單元測(cè)試類:
然后就能看到測(cè)試覆蓋度報(bào)告了,如下圖:
顯然 Main 方法沒(méi)有被測(cè)試到,所以顯示 0%。
除了在開發(fā)工具中查看測(cè)試報(bào)告外,還可以導(dǎo)出報(bào)告為 HTML 文檔:
導(dǎo)出后,會(huì)得到一個(gè) HTML 靜態(tài)文件目錄,打開 index.html
就能在瀏覽器中查看更詳細(xì)的單元測(cè)試報(bào)告了:
這種方式簡(jiǎn)單靈活,不用安裝任何插件,比較推薦大家日常學(xué)習(xí)使用。
使用 jacoco 生成單測(cè)報(bào)告
JaCoCo 是一個(gè)常用的 Java 代碼覆蓋度工具,能夠自動(dòng)根據(jù)單元測(cè)試執(zhí)行結(jié)果生成詳細(xì)的單測(cè)報(bào)告。
它的用法也很簡(jiǎn)單,推薦按照官方文檔中的步驟使用。
官方文檔指路:www.eclemma.org/jacoco/trun…
首先在 Maven 的 pom.xml 文件中引入:
<plugin>
??<groupId>org.jacoco</groupId>
??<artifactId>jacoco-maven-plugin</artifactId>
??<version>0.8.11</version>
</plugin>
當(dāng)然,只引入 JaCoCo 插件還是不夠的,我們通常希望在執(zhí)行單元測(cè)試后生成報(bào)告,所以還要增加 executions
執(zhí)行配置,示例代碼如下:
<plugin>
????<groupId>org.jacoco</groupId>
????<artifactId>jacoco-maven-plugin</artifactId>
????<version>0.8.11</version>
????<configuration>
????????<includes>
????????????<include>com/**/*</include>
????????</includes>
????</configuration>
????<executions>
????????<execution>
????????????<id>pre-test</id>
????????????<goals>
????????????????<goal>prepare-agent</goal>
????????????</goals>
????????</execution>
????????<execution>
????????????<id>post-test</id>
????????????<phase>test</phase>
????????????<goals>
????????????????<goal>report</goal>
????????????</goals>
????????</execution>
????</executions>
</plugin>
然后執(zhí)行 Maven 的 test 命令進(jìn)行單元測(cè)試:
測(cè)試結(jié)束后,就能夠在 target 目錄中,看到生成的 JaCoCo 單元測(cè)試報(bào)告網(wǎng)站了:
打開網(wǎng)站的 index.html 文件,就能看到具體的測(cè)試報(bào)告結(jié)果,非常清晰:
通常這種方式會(huì)更適用于企業(yè)中配置流水線來(lái)自動(dòng)化生成測(cè)試報(bào)告的場(chǎng)景。
行動(dòng)吧,在路上總比一直觀望的要好,未來(lái)的你肯定會(huì)感謝現(xiàn)在拼搏的自己!如果想學(xué)習(xí)提升找不到資料,沒(méi)人答疑解惑時(shí),請(qǐng)及時(shí)加入群: 786229024,里面有各種測(cè)試開發(fā)資料和技術(shù)可以一起交流哦。
最后:?下方這份完整的軟件測(cè)試視頻教程已經(jīng)整理上傳完成,需要的朋友們可以自行領(lǐng)取【保證100%免費(fèi)】
軟件測(cè)試面試文檔
我們學(xué)習(xí)必然是為了找到高薪的工作,下面這些面試題是來(lái)自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有字節(jié)大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-833216.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-833216.html
到了這里,關(guān)于職場(chǎng)經(jīng)驗(yàn)、為什么程序員一定要寫單元測(cè)試?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!