这是Spock系列中的第一篇文章。
整张专辑将介绍Spock的目的。
为什么要使用Spock?它可以给我们带来什么好处?它和JUnit,JMock,Mockito有什么区别?我们通常编写单元测试代码的常见问题和难点,Spock如何解决,如何编写Spock代码以及Spock的优缺点,使每个人对Spock都有一个客观的了解。
什么是Spock? Spock是一个出色的国外测试框架。
它基于BDD的思想,功能强大。
它可以使我们的测试代码标准化并具有清晰的结构。
结合了动态动态语言的特性和它自身提供的各种标签,使编写测试代码更加有效。
简洁,提供一种通用,简单和结构化的描述语言。
官方网站的介绍如下(http://spockframework.org)。
“ Spock是用于Java和Groovy应用程序的测试和规范框架。
它之所以能在人群中脱颖而出,是因为它具有优美而富于表现力的规范语言。
Spock受到JUnit,RSpec,jMock,Mockito,Groovy,Scala和Vulcans的启发”。
简而言之,Spock的功能如下:让我们的测试代码更加标准化,并内置更多的各种标签,以标准化单个测试代码的语义,从而使我们的测试代码结构清晰,可读性强,并减少后期维护的难度。
提供各种标签,例如:在何处,在何处,引发...帮助我们处理复杂的测试该场景加上使用groovy(一种动态的语言来编写测试代码)的使用,可以使我们编写的测试代码更加简洁,适用于敏捷开发,并提高编写单个测试代码的效率。
遵守BDD行为驱动的开发模型,不仅适用于测试范围。
测试可以帮助提高代码质量。
IDE兼容性很好。
为什么要使用Spock及其内置的模拟功能? Spock与JUnit,JMock和Mockito有什么区别?现有的单个测试框架(例如junit,jmock和mockito)是相对独立的工具,它们仅针对不同的业务场景提供特定的解决方案。
Junit纯粹用于测试,不提供模拟功能。
微服务已经是互联网公司的主流技术架构。
大多数系统都是分布式的。
服务和服务通常通过接口进行交互,甚至将内部服务划分为多个模块。
许多业务功能需要依靠基础接口返回的数据来继续其余过程,或者从存储设备中获取数据。
例如数据库/ Redis,或从配置中心的配置中获取它。
结果,如果我们要测试代码逻辑是否正确,则必须模拟这些依赖项(接口,Redis,DB,配置中心...)。
如果接口不稳定或有问题,它将影响我们代码的正常测试,因此我们必须模拟调用接口的位置,并让其返回指定的结果(预先准备的数据),以便我们可以验证我们自己的代码是否正确,是否符合预期的逻辑和结果。
尽管JMock或Mockito提供了可以屏蔽接口和其他依赖项的模拟函数,但它没有为静态类的静态方法提供模拟。
尽管PowerMock或Jmockit提供了静态类和方法的模拟,但是它们需要集成(junit + mockito)。
+ powermock),语法繁琐,并且这些工具不会告诉您“应该如何编写单元测试代码?”更多的工具也将导致不同的人以不同的风格编写各种单元测试代码。
。
。
Spock提供了标准描述,并定义了各种标签(给定,何时,何时,何地等)来描述代码“应做什么”,输入条件是什么以及输出是否满足期望,并标准化了书写方式。
从语义层面看代码。
Spock附带了Mock函数,该函数简单易用(还支持其他模拟框架的扩展,例如Power Mock),再加上groovy动态语言的强大语法,可以编写简洁高效的测试代码,并且同时更方便,直观地验证业务代码的循环行为,增强了我们代码执行逻辑的可控性。
下一篇文章将详细说明编写单元测试代码过程中通常遇到的难点,并结合实际的代码案例来说明Spock如何解决这些问题。
例如,单一测试开发的效率和成本,可读性和以后的维护问题,以及单一测试如何提高业务代码的质量。
背景和初衷Internet上有关Spock的信息相对简单,包括