spock 集成测试

了解如何利用Spock 1.2切片传统应用程序的Spring上下文,编写集成测试。

您是否曾经想过,要开始使用一些遗留应用程序,编写一些测试以了解正在发生的事情,并可能收到有关回归的通知? 当您想实例化单个类时,这种感觉会因NullPointerException而失败。 6替换(有困难)依赖项之后,您以前从未听说过的类仍然存在一些错误。 听起来很熟悉?

有多种技术可以处理隐藏的依赖项。 有整本专门的书(可能还有一些我还没有读过的书)。 有时,从集成测试开始并执行某些过程可能是可行的。 即使只是在我们的案例中完全不需要,查看仅设置上下文所需要的奇特组件也可能更“有趣”。 谢谢(太宽和粗心使用) @ComponentScan :)。

在测试环境中注入存根/模拟是一种作为紧急援助的方式(请参阅最后一段,有更好但更难的方法)。 我们可以通过一个额外的带有@Primary批注的bean定义来“手动”实现(通常是在这样做之前要三思而后行的原因),这是针对我们想要削减的每个依赖项(或实例化的每个不需要的bean)的顺便说说)。 @MockBean放在测试中的某个字段上更方便,但是仍然需要在我们的测试中定义一个字段并在其上添加批注(5?10?15 bean?)。 Spock 1.2引入了某种@StubBeans功能, @StubBeans在这里可能有用。

它可以用来简单地提供一个类列表,这些类(可能)应在Spring测试上下文中用存根替换。 当然,在实例化实际对象之前(例如,防止在构造函数中使用NPE)。 多亏了这几行存根/模拟注入:

@RunWith(SpringRunner.class) //Spring Boot + Mockito
@SpringBootTest //possibly some Spring configuration with @ComponentScan is imported in this legacy application
public class BasicPathReportGeneratorInLegacyApplicationITTest { //usual approach@MockBeanprivate KafkaClient kafkaClientMock;@MockBeanprivate FancySelfieEnhancer fancySelfieEnhancerMock;@MockBeanprivate FastTwitterSubscriber fastTwitterSubscriberMock;@MockBeanprivate WaterCoolerWaterLevelAterter waterCoolerWaterLevelAterterMock;@MockBeanprivate NsaSilentNotifier nsaSilentNotifierMock;//a few more - remember, this is legacy application, genuine since 1999 ;)//...@Autowiredprivate ReportGenerator reportGenerator;@Testpublic void shouldGenerateEmptyReportForEmptyInputData() {...}
}

可以只替换为一(长)行:

@SpringBootTest //possibly some Spring configuration with @ComponentScan is imported in this legacy application
@StubBeans([KafkaClient, FancySelfieEnhancer, FastTwitterSubscriber, WaterCoolerWaterLevelAterter, NsaSilentNotifier/(, ... */])//all classes of real beans which should be replaced with stubs
class BasicPathReportGeneratorInLegacyApplicationITSpec extends Specification {@Autowiredprivate ReportGenerator reportGeneratordef "should generate empty report for empty input data"() {....}
}

(使用Spock 1.2-RC2测试)

值得一提的是@StubBeans仅用于提供占位符。 在某种情况下,需要提供存根和/或调用验证@SpringBean@SpringSpy (在Spock 1.2中也引入了)更好。 我在以前的博客文章中写了更多有关它的内容 。

有一个重要方面要强调@StubBeans在我们有一些“遗留”项目并希望快速开始编写集成回归测试以查看结果的情况下很方便使用。 但是,正如我的一位同事DarekKaczyński的总结所概括的那样,盲目更换在测试中“爆炸”的豆仅仅是“扫除地毯下的问题”。 在初始阶段之后,当我们开始了解正在发生的事情时,是重新考虑在生产环境和测试环境中创建上下文的好时机。 已经提到过的@ComponentScan太宽泛,通常是万恶之源。 设置部分上下文并将其放在一起(如果需要)的能力是一个很好的起点。 使用@Profile或条件Bean是测试中非常强大的机制(不仅限于此)。 @TestConfiguration和适当的bean选择以改善上下文缓存是值得牢记的。 但是,我从本文开始介绍了Spock中的新机制,该机制在某些情况下可能会有用,并且我想使其简短。 可能还有另一篇更通用的博客文章,关于在集成测试中管理Spring上下文。 我必须认真对待它:)。

翻译自: https://www.javacodegeeks.com/2018/09/integration-testing-legacy-application-spock-1-2.html

spock 集成测试

spock 集成测试_使用Spock 1.2简化对遗留应用程序的集成测试相关推荐

  1. 使用Spock 1.2简化对遗留应用程序的集成测试

    了解如何利用Spock 1.2切片传统应用程序的Spring上下文,编写集成测试. 您是否曾经想过,要开始使用一些遗留应用程序,编写一些测试以了解正在发生的事情,并可能收到有关回归的通知? 当您想实例 ...

  2. spock测试_将Spock 1.3测试迁移到Spock 2.0

    spock测试 了解Spock 2.0 M1(基于JUnit 5)的期望,如何在Gradle和Maven中迁移到它以及为什么报告发现的问题很重要:). 重要说明 . 我绝对不建议您永久将您的现实项目迁 ...

  3. spock 集成测试_使用Spock Mocks进行Grails 3.3集成测试

    spock 集成测试 在Grails单元测试中,可以轻松使用Grails随附的Spock框架来模拟或存根协作者(例如服务). " 测试"一章对模拟协作者, doWithSpring ...

  4. spock测试_使用Spock测试您的代码

    spock测试 Spock是针对Java和Groovy应用程序的测试和规范框架. Spock是: 极富表现力 简化测试的"给定/何时/然后" 语法 与大多数IDE和CI服务器兼容. ...

  5. spock测试_用Spock测试AKKA应用程序

    spock测试 AKKA是基于消息驱动和基于AKKA模型的并发工具包. 尽管AKKA用Scala编写, AKKA可以在任何基于JVM的语言项目中使用. 这篇文章试图填补关于在利用AKKA框架的多语言J ...

  6. java集成测试_基于TestNG+Mockito及自动装配注解的Spring MVC集成测试

    本文主要总结自己近期在项目中对MVC集成测试的实践及理解,因为先前对这块未实践过.主要参考了官方文档<11.3.6 Spring MVC Test Framework>这一章节内容,涉及到 ...

  7. mysql 集成测试_在使用mysql的Jruby on Rails应用程序上运行Cucumber/capybara/celerity集成测试...

    因此,我将使用rvm将应用程序切换到jruby进行测试,因为显然celerity/culerity目前只在jruby上工作.我已经安装了我的包,应用程序似乎在jruby上正常工作,但是当我尝试运行&q ...

  8. spock测试_用于混合Spock 1.x和JUnit 5测试的Maven项目设置

    spock测试 我为Maven创建了一个示例Groovy项目,该项目在一个项目中混合了Spock测试和JUnit 5测试. 在下一节中,我将描述如何设置这种Maven项目. 在项目中启用Groovy ...

  9. java集成测试_到底什么是集成测试?

    你的问题其实要分两块儿来说,因为现在用的是手机所以先简要回答一二,不明白的话再补充. 单元测试就是最小代码单元的针对性测试,可以是对象的一个属性,检查是否存在或值是否有效等等:也可以是一个函数或方法, ...

最新文章

  1. mysql reflush pri_mysql忘记root密码拯救方法(flush privileges)
  2. Camelyon Challenge: 癌症细胞区域检测竞赛
  3. 微信基础服务肯定不收费
  4. 3、常用数据库访问接口简介
  5. Inverse of Rows and Columns
  6. 梯度提升树(GBDT)原理小结
  7. asp.net core2.2 多用户验证和授权
  8. leetcode338 比特位计数
  9. python网络爬虫的方法有几种_Python网络爬虫过程中5种网页去重方法简要介绍
  10. 用etcd实现服务注册和发现
  11. spring @component的作用详细介绍
  12. javascript之Map 和 Set
  13. 地图小部件—ArcGIS API for JavaScript
  14. 清除浮动的七种方式方法(实例代码讲解)
  15. STC15单片机学习笔记1——STC15W4K56S4引脚功能整理说明
  16. 乐优商城(17)--评论服务
  17. YY协议官方下载|YY协议|YY协议下载|唯一官方网站www.yyfass.com
  18. 多媒体大作业 ps+flash
  19. 基于python的json脚本解析
  20. 期货手续费标准和保证金比例

热门文章

  1. 【蓝桥杯】 2018年国赛 矩阵求和
  2. test2 3-16 2021 模拟赛two
  3. CodeForces616:Educational Round 5
  4. P3306-[SDOI2013]随机数生成器【BSGS】
  5. jzoj6310-Global warming【线段树,LIS】
  6. P2053-修车【网络流,费用流】
  7. 【做题记录】max-min+1=len 区间计数
  8. codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
  9. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)
  10. 离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习