本篇来聊一下项目开发过程中至关重要的一个话题:单元测试。
早期在一些大公司的传统业务部门,比如:微软的windows、office等部门,研发和测试人员的比例基本是1:1到2:1之间,一个核心模块的测试用例动辄几十万个test case,而一次full-test都要跑几天、甚至几个星期。每个新版本发布之前都要跑好多轮full-test,软件的每个模块都有详细的文档定义清楚:测试结果要达到怎么样的标准才算是这一个模块测试通过(核心是测试通过率)。一直到整个产品的质量满足产品设计的要求了才可以发布上线,可见测试对于大型软件项目的重要性。在如此严格的软件工程管理之下,一个新版本从设计、开发,到上线,一般需要一年、甚至几年的时间。
到了2010年前后,随着移动互联网的兴起,软件的开发模型也发生了重大变化,软件迭代周期越来越短,很多客户端软件都是每个月、甚至每周发布新的版本,极端的情况下一周甚至会发布两个新版本。在这种情况下,针对每个发布版本做完整的full test几乎是不可能的事情。随着时间的推移,无数公司的生与死用事实证明了快速迭代开发模型的优越性——用最短的时间贴合用户的真实需求。
在agile思想的冲击下,连软件行业巨头们——如前文提到的微软——也嗅到了被淘汰的危机感,很快大刀阔斧砍掉了几乎所有的测试团队。但是,砍掉测试团队、裁掉测试人员,不等于软件就不测试了,而是转移了测试环节:要求每个模块都要写足够数量的测试用例。只有这样,各模块之间联调才会顺利,最终发布的产品才能够达到一定的水准。
说了这么多,不过是想说一件事:研发不要写裸奔的代码,尤其是逻辑负责的模块,更要写充分的单元测试才可以。下面来看一下基于spring boot写unit test的基本步骤。本文只介绍controller的测试用例编写过程。
添加测试用例分为下面几个步骤:
添加测试类
在test/java/com/fintech/helloworld目录下添加Java Class “HelloControllerTest”
在新创建的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自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点我自行获取…
运行单元测试有两种方式:
run button
通过点击run button运行整个测试类,或者单个测试用例
通过命令行
运行单元测试
mvn test
运行Test类里面的所有测试用例
mvn -Dtest=HelloControllerTest test
或者运行Test类里面某一个特定的测试用例
mvn -Dtest=HelloControllerTest#helloTest test
或者运行Test类里面的某些测试用例(函数名以hello开头的测试用例)
mvn -Dtest=HelloControllerTest#hello* test
如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以 点我自行获取…
在开发的过程中,经常会添加/改动功能,往往会导致现有的一些测试用例失效,在调试这些新功能的过程中,每次编译都会自动跑全部测试用例,又会很耗时,因此有必要在这种情况下不跑测试。
在编译的过程中加入下面的参数可以直接略过所有的单元测试:
mvn -DskipTests = true ……
在这里还是要推荐下我自己建的Python学习Q群:,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2022最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!