首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Thread.sleep对Spring集成测试的坏主意?

Thread.sleep对Spring集成测试的坏主意。

Thread.sleep是Java中的一个方法,用于使当前线程暂停执行一段时间。在Spring集成测试中,使用Thread.sleep来等待某个操作完成可能是一个坏主意,原因如下:

  1. 不可靠性:Thread.sleep的等待时间是固定的,但实际操作所需的时间可能会有所不同。如果等待时间设置得太短,可能导致操作尚未完成就继续执行后续代码,从而导致测试失败。如果等待时间设置得太长,会浪费测试时间。
  2. 代码耦合:使用Thread.sleep将测试代码与被测试的代码耦合在一起。如果被测试的代码发生变化,可能需要调整等待时间,这样会增加维护成本并且降低代码的可维护性。
  3. 测试效率低下:使用Thread.sleep会导致测试执行时间变长,特别是在大规模的集成测试中。这会降低测试效率,增加测试周期。

相反,Spring提供了一些更好的替代方案来处理异步操作和等待条件的情况,例如:

  1. 使用Spring的异步支持:Spring提供了异步执行任务的机制,可以使用@Async注解将方法标记为异步执行。在测试中,可以使用CompletableFuture或者Future来等待异步操作的完成。
  2. 使用Spring的测试工具类:Spring提供了一些测试工具类,例如CountDownLatch、LatchAwait、Awaitility等,可以用于等待特定条件的发生。
  3. 使用Mockito等测试框架:可以使用Mockito等测试框架来模拟异步操作的返回结果,从而避免使用Thread.sleep等待。

总结起来,使用Thread.sleep来等待操作完成在Spring集成测试中是一个不推荐的做法。相反,应该使用Spring提供的异步支持和测试工具类来处理异步操作和等待条件的情况,以提高测试的可靠性和效率。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Boot 中集成测试

内容会覆盖单元测试,也会有在执行测试用例前会启动 Spring 上下文集成测试。如果你是使用 Spring Boot 新手,查看链接:Spring Boot 介绍。...理想情况下,我们应该把单元测试集成测试分开,并且不应该和单元测试一起运行。我们可以通过使用不同配置文件来实现这个分离。为什么要这么做呢?...因为一般集成测试比较消耗时间并且有可能需要真正数据库(不是内存数据库)来执行。 然而在本文中,我们不关注这个,我们关注是,使用内存数据库H2持久化存储。 集成测试需要启动一个容器来执行测试用例。...集成测试测试用例看起来像Controller层单元测试。...你可以读到关于这些注解更多文章,并继续优化集成测试,优化Spring集成测试。 10 结论 在本文中,我们深入探讨了在Spring Boot中进行测试,并展示了怎么更有效编写测试用例。

4.1K30
  • Spring集成TestNG测试MVC Controller

    Spring集成TestNG 首先把需要jar包加入到项目里,因为都是测试相关,所以scope都是test,引入jar包pom.xml需要增加如下依赖(spring 版本需要在3.2以上):...bean构造方式跟线上不一致,需要在src/main/resources目录下新建spring配置文件,这样testcase执行时候加载测试环境文件。...比如数据库datasource bean就有可能不一样。 2:在spring IOC容器之前如果有数据库需要进行初使化的话,则可以在这个测试构造方法里执行相应代码。...3:如果需要在spring IOC容器初使化之后执行相应数据库初使代码,则可以在testng@BeforeClass方法里执行。 4:在测试具体接口时候,需要用断言对结果进行预测。...6:这样写测试类会连同Spring MVC基础设施(如DispatcherServlet调度、类型转换、数据绑定、拦截器, 最终渲染视图 @ResponseBody生成JSON/XML、JSP、

    1.1K30

    SpringSpring Boot和TestNG测试指南 - 集成测试中用Docker创建数据库

    测试关系型数据库一篇里我们使用是H2数据库,这是为了让你免去你去安装/配置一个数据库工作,能够尽快了解到集成测试过程。...在文章里也说了: 在真实开发环境中,集成测试用数据库应该和最终生产数据库保持一致 那么很容易就能想到两种解决方案: 开发团队使用共用同一个数据库。...这样做问题在于:当有多个集成测试同时在跑时,会产生错误测试结果。 每个人使用自己数据库。这样做问题在于让开发人员维护MySQL数据库挺麻烦。 那么做到能否这样呢?...我们还是会以测试关系型数据库里FooRepositoryImpl来做集成测试(代码在这里)。下面来讲解具体步骤: 安装Docker 请查阅官方文档。并且掌握Docker基本概念。...可以看到fabric8 dmp在集成测试前后start和stop容器相关日志,且测试成功。 如何找到MySQL端口开在哪一个呢?

    1.1K20

    Maven管理Spring Web项目集成JUnit单元测试

    JUnit是一套优秀单元测试框架,而Maven是优秀Java项目构建和管理工具,两者结合可以很方便地项目进行自动化测试。   ...一般简单Java应用就不多说了,一些框架会提供针对junit扩展,使得测试变得更容易,例如Spring官方就提供了spring-test,用于提供获取ApplicationContext等方面的支持...首先要做是,改变JUnit实际执行类,将默认执行类Suite替换为Spring提供SpringJUnit4ClassRunner,也就是在测试类前面加上一个注解:   @RunWith(SpringJUnit4ClassRunner.class...)   然后,我们需要告诉这个测试Spring配置文件位置: @ContextConfiguration(locations={“classpath:applicationContext.xml...命令还可以方便地特定目录下(通常是src/test/java目录)所有测试类进行批量测试

    53130

    如何Spring MVC中Controller进行单元测试

    Controller进行单元测试Spring框架原生就支持能力,它可以模拟HTTP客户端发起服务地址请求,可以不用借助于诸如Postman这样外部工具就能完成对接口测试。...具体来讲,是由Spring框架中spring-test模块提供实现,详见MockMvc。...如下将详细阐述如何使用MockMvc测试框架实现Spring Controller”进行单元测试,基于Spring Boot开发框架进行验证。 添加测试框架依赖: <!...MockMvc支持常见HTTP方法,如:GET,POST,PUT,DELETE等,甚至还支持文件上传请求。...写在最后 使用Spring提供测试框架MockMvc可以非常方便地实现HTTP服务接口进行单元测试,不要把基础功能验证工作都交给测试童鞋,应该通过单元测试来保证代码迭代稳定性。

    2.3K30

    Hadoop集成Spring使用

    集成了其它Spring生态系统项目,如Spring Integration和Spring Batch.。...集成Spring Boot,可以简单地创建Spring应用程序去连接HDFS进行读写数据。 创建和配置,使用javaMapReduce,Streaming,Hive,Pig或HBase。...扩展Spring Batch支持创建基于Hadoop工作流任何类型Hadoop Job或HDFS操作。 脚本HDFS操作使用任何基于JVM脚本语言。...接下来我们来创建个测试类,测试一下是否能够正常HDFS文件系统进行操作: package org.zero01.spring; import org.apache.hadoop.fs.FileSystem...既然创建目录没有问题,我们就再来写一个测试方法,用来读取HDFS上某个文件内容,代码如下: /** * 读取HDFS上文件内容 * @throws Exception */ @Test public

    2K20

    Spring Boot 集成 JUnit5,更优雅单元测试

    JUnit5易扩展,包容性强,可以接入其他测试引擎。 功能更强大提供了新断言机制、参数化测试、重复性测试等新功能。 ps:开发人员为什么还要测试,单测写这么规范有必要吗?...如果您正在学习Spring Boot,推荐一个连载多年还在继续更新免费教程:http://blog.didispace.com/spring-boot-learning-2x/ 依赖引入 我们以SpringBoot2.3.1...Spring Boot,推荐一个连载多年还在继续更新免费教程:http://blog.didispace.com/spring-boot-learning-2x/ 断言 JUnit Jupiter提供了强大断言方法用以验证结果...") void testTimeOut() {     String actualResult = assertTimeout(ofSeconds(2), () -> {         Thread.sleep...重磅消息:Spring 6 和Spring Boot 3 短信验证码登录流程思路及详细步骤 反996,竟反掉了17%薪水?!而隔壁房贷还在涨,怎么就越反越糟糕了呢?

    1K20

    Spring Boot 集成 JUnit5,更优雅单元测试

    JUnit5易扩展,包容性强,可以接入其他测试引擎。 功能更强大提供了新断言机制、参数化测试、重复性测试等新功能。 ps:开发人员为什么还要测试,单测写这么规范有必要吗?... org.springframework.boot spring-boot-starter-test...") void testTimeOut() { String actualResult = assertTimeout(ofSeconds(2), () -> { Thread.sleep...(a > 0 && a < 4); } 内嵌测试 JUnit5提供了嵌套单元测试功能,可以更好展示测试类之间业务逻辑关系,我们通常是一个业务对应一个测试类,有业务关系类其实可以写在一起。...来试试“双向SDK集成” 一女程序员被判 9 个月:因薪酬等问题离职,rm -f * 删库,瘫痪 6 个小时 一起来看看Fastjson三种漏洞利用链 分享、点赞、在看,给个3连击呗

    3.8K31

    Spring Boot 集成 JUnit5,更优雅单元测试

    JUnit5易扩展,包容性强,可以接入其他测试引擎。 功能更强大提供了新断言机制、参数化测试、重复性测试等新功能。 ps:开发人员为什么还要测试,单测写这么规范有必要吗?...JUnit Vintage :这个模块是兼容JUnit3、JUnit4版本测试引擎,使得旧版本自动化测试也可以在JUnit5下正常运行。... org.springframework.boot spring-boot-starter-test...void testTimeOut() { String actualResult = assertTimeout(ofSeconds(2), () -> { Thread.sleep...assertTrue(a > 0 && a < 4); } 内嵌测试 JUnit5提供了嵌套单元测试功能,可以更好展示测试类之间业务逻辑关系,我们通常是一个业务对应一个测试类,有业务关系类其实可以写在一起

    1.4K20

    Spring Boot 应用测试Spring Boot 应用测试

    Spring Boot 应用测试Spring Boot 实战开发》(陈光剑) —— 基于 Gradle + Kotlin企业级应用开发最佳实践 本书写到这里,Spring Boot 2.0.0...Spring Boot 提供spring-boot-test 模块基于 spring-test 模块和junit 框架,封装集成了功能强大结果匹配校验器assertj 、hamcrest Matcher...Mockito 主要用于 service 层 mock 测试。mock 对象一般是 DAO 层依赖; 另外就是别人Service实现类。...spring-boot-starter-test中提供了项目测试功能强大支持,更难得是其中增加了Controller层测试支持。...Spring Boot 应用Web层测试提供强大支持:采用MockMvc方式测试Web请求,根据传递不用参数以及请求返回对象反馈信息进行验证测试

    1.5K30

    SpringCSRF防范

    这篇基本上是Spring Security Reference关于 CSRF 部分一个笔记,只是记录一下核心逻辑。其它很多细节还是要参考官方文档。 什么是 CSRF 跨站请求伪造。...这个场景背后逻辑: 这里我们把浏览器等同于用户,有些数据是用户自己可见,有些数据是浏览器自动处理、发送而用户这些数据是无感知(比如 SessionId)。...2)Synchronizer Token Pattern 这个解决办法原理是来自浏览器请求我们都回送一个随机数,下次浏览器再请求业务时需要在 header 里或者表单里带上这个随机数。...相当于分别在两条不同路径上传递。 Spring Security 模块生成 csrf token 后可放在两个地方。...Spring 默认,随机数与 sessionId 关联,放在 session 里。另一个方式:随机数放在 cookie 里。

    63340
    领券