10分钟学会Springboot项目单元测试

(31) 2024-08-30 13:01:01

本篇来聊一下项目开发过程中至关重要的一个话题:单元测试。

早期在一些大公司的传统业务部门,比如:微软的windows、office等部门,研发和测试人员的比例基本是1:1到2:1之间,一个核心模块的测试用例动辄几十万个test case,而一次full-test都要跑几天、甚至几个星期。每个新版本发布之前都要跑好多轮full-test,软件的每个模块都有详细的文档定义清楚:测试结果要达到怎么样的标准才算是这一个模块测试通过(核心是测试通过率)。一直到整个产品的质量满足产品设计的要求了才可以发布上线,可见测试对于大型软件项目的重要性。在如此严格的软件工程管理之下,一个新版本从设计、开发,到上线,一般需要一年、甚至几年的时间。

10分钟学会Springboot项目单元测试 (https://mushiming.com/)  第1张

到了2010年前后,随着移动互联网的兴起,软件的开发模型也发生了重大变化,软件迭代周期越来越短,很多客户端软件都是每个月、甚至每周发布新的版本,极端的情况下一周甚至会发布两个新版本。在这种情况下,针对每个发布版本做完整的full test几乎是不可能的事情。随着时间的推移,无数公司的生与死用事实证明了快速迭代开发模型的优越性——用最短的时间贴合用户的真实需求。

在agile思想的冲击下,连软件行业巨头们——如前文提到的微软——也嗅到了被淘汰的危机感,很快大刀阔斧砍掉了几乎所有的测试团队。但是,砍掉测试团队、裁掉测试人员,不等于软件就不测试了,而是转移了测试环节:要求每个模块都要写足够数量的测试用例。只有这样,各模块之间联调才会顺利,最终发布的产品才能够达到一定的水准。

说了这么多,不过是想说一件事:研发不要写裸奔的代码,尤其是逻辑负责的模块,更要写充分的单元测试才可以。下面来看一下基于spring boot写unit test的基本步骤。本文只介绍controller的测试用例编写过程。

01 添加测试用例

添加测试用例分为下面几个步骤:

添加测试类

在test/java/com/fintech/helloworld目录下添加Java Class “HelloControllerTest”

10分钟学会Springboot项目单元测试 (https://mushiming.com/)  第2张

在新创建的HelloControllerTest头部添加注解:

@RunWith(SpringRunner.class) @SpringBootTest public class HelloControllerTest { 
    …… 

定义并配置MockMvc

@RunWith(SpringRunner.class) @SpringBootTest public class HelloControllerTest { 
    private MockMvc mockMvc; @Before public void before() { 
    mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build(); } …… 

注:每个测试用例运行之前,都会调用一次被@Before注解的函数,也就是说before函数适合用来为每个测试用例配置一些通用的环境。

添加测试用例

 @Test public void helloTest() throws Exception { 
    mockMvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } 

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点我自行获取…

02 运行单元测试

运行单元测试有两种方式:

run button 

通过点击run button运行整个测试类,或者单个测试用例

10分钟学会Springboot项目单元测试 (https://mushiming.com/)  第3张

通过命令行

运行单元测试

mvn test 

运行Test类里面的所有测试用例

mvn -Dtest=HelloControllerTest test 

或者运行Test类里面某一个特定的测试用例

mvn -Dtest=HelloControllerTest#helloTest test 

或者运行Test类里面的某些测试用例(函数名以hello开头的测试用例)

mvn -Dtest=HelloControllerTest#hello* test 

03 跳过单元测试

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点我自行获取…

在开发的过程中,经常会添加/改动功能,往往会导致现有的一些测试用例失效,在调试这些新功能的过程中,每次编译都会自动跑全部测试用例,又会很耗时,因此有必要在这种情况下不跑测试。

在编译的过程中加入下面的参数可以直接略过所有的单元测试:

mvn -DskipTests = true …… 

在这里还是要推荐下我自己建的Python学习Q群:,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2022最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

THE END

发表回复