位置:
首页

>

>

什么是Spock?它和JUnit和JMock有什么区别?
时间:

这是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的信息相对简单,包括

产品资料
行业信息