当前位置: 首页 > news >正文

代码界的奥斯卡:SpringBoot测试的艺术与科学

探索SpringBoot测试的神秘世界,揭秘如何成为代码质量的守护神!从基础环境搭建到高级集成测试,本系列教程带你一步步构建坚不可摧的测试防线。深入JUnit 5的强大功能,学习如何用MockMvc和Testcontainers打造逼真的测试场景。准备好迎接软件质量的革命了吗?让我们一起揭开测试的神秘面纱!

文章目录

    • 第1章:SpringBoot 测试基础,开启你的自动化测试之旅
      • 1.1 测试环境配置:搭建你的测试舞台
      • 1.2 自动化测试理念与SpringBoot支持:自动化,让测试更高效
      • 1.3 测试依赖管理与设置:精心挑选你的演员
    • 第2章:使用JUnit 5进行单元测试,让代码在舞台上独舞
      • 2.1 JUnit 5新特性概览:新剧本,新舞台
      • 2.2 编写基本单元测试案例:编写你的剧本
      • 2.3 断言(Assertions)与匹配器(Matchers):道具和特效
      • 2.4 参数化测试(Parameterized Tests):多场景测试
      • 2.5 嵌套测试与生命周期管理:导演的剪辑室
    • 第3章:集成测试和模拟外部服务,让代码在真实世界中起舞
      • 3.1 SpringBootTest注解与测试切面:导演的镜头
      • 3.2 使用@MockBean与@SpyBean模拟Bean:特效化妆师
      • 3.3 配置文件与Profile在集成测试中的运用:场景切换
      • 3.4 外部服务模拟(MockMvc, RestTemplate, WebClient):与外界的对话
      • 3.5 数据库测试策略:In-Memory与Testcontainers:电影中的特效场景
    • 第4章:结论,测试之旅的收获与未来
      • SpringBoot测试策略总结:回顾我们的旅程
      • 测试对软件质量的影响:质量的守护者
      • 持续集成与自动化测试的未来展望:未来的测试之旅
    • 参考文献
      • [1] Spring Boot Testing Documentation
      • [2] JUnit 5 User Guide
      • [3] MockMvc Documentation
      • [4] Testcontainers GitHub Repository
      • [5] Effective Integration Testing for Microservices with Spring Boot

在这里插入图片描述

第1章:SpringBoot 测试基础,开启你的自动化测试之旅

1.1 测试环境配置:搭建你的测试舞台

想象一下,你是一位导演,准备拍摄一部大片。首先,你需要搭建一个舞台,一个让演员们尽情表演的地方。在SpringBoot的世界里,测试环境配置就像是这个舞台。我们需要准备好一切,让代码在这个环境中自由地“表演”。

首先,你需要安装Java和SpringBoot。Java是演员,SpringBoot是导演,它们共同完成这部大片。接着,搭建一个IDE(集成开发环境),比如IntelliJ IDEA或者Eclipse,它们就像是你的摄影机,帮助你捕捉每一个细节。

然后,配置你的项目。使用Maven或Gradle来管理依赖,就像选择演员一样,你需要确保每个角色都能在舞台上发挥作用。最后,设置你的测试框架,JUnit 5是首选,它将作为你的剧本,指导演员们如何表演。

1.2 自动化测试理念与SpringBoot支持:自动化,让测试更高效

自动化测试就像是电影中的特效,它让一切看起来更加真实和流畅。SpringBoot对自动化测试的支持,就像是特效团队,让测试过程更加高效和自动化。

SpringBoot提供了一系列的工具和库,让你可以轻松地编写测试代码。想象一下,你只需要写下几个注解,就可以自动启动Spring应用上下文,这就像是按下一个按钮,特效团队就会开始工作。

1.3 测试依赖管理与设置:精心挑选你的演员

在电影中,挑选合适的演员至关重要。在SpringBoot测试中,管理测试依赖也同样重要。你需要确保你的测试环境包含了所有必要的库和框架,这样你的代码才能正常运行。

使用Maven或Gradle,你可以轻松地添加和更新依赖。这就像是为电影挑选演员,你需要确保每个角色都有合适的人选。一旦依赖管理得当,你的测试就会像电影一样顺利进行。

在这一章中,我们搭建了测试的舞台,引入了自动化测试的理念,并且学会了如何管理测试依赖。就像一部精彩的电影,我们的测试之旅才刚刚开始。接下来,我们将深入探索JUnit 5的奥秘,编写我们的测试剧本,让代码在测试舞台上大放异彩。敬请期待下一章,我们将一起编写基本单元测试案例,让测试变得更加有趣和高效。

第2章:使用JUnit 5进行单元测试,让代码在舞台上独舞

2.1 JUnit 5新特性概览:新剧本,新舞台

继上一章我们搭建了舞台,现在我们迎来了新的主角——JUnit 5。JUnit 5不仅仅是一个测试框架,它更像是一个全新的剧本,让代码在测试舞台上独舞。

JUnit 5带来了许多新特性,比如模块化的架构,这意味着你可以像挑选演员一样,根据需要选择不同的模块。还有新的断言和匹配器,它们就像是舞台上的道具,帮助演员们更好地表演。

2.2 编写基本单元测试案例:编写你的剧本

现在,让我们开始编写剧本。首先,你需要创建一个测试类,这就像是为演员准备一个角色。然后,编写测试方法,这些方法将是你的演员在舞台上的表演。

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;public class CalculatorTest {@Testpublic void testAdd() {Calculator calculator = new Calculator();int result = calculator.add(2, 3);assertEquals(5, result, "2 + 3 should equal 5");}
}

在这个例子中,我们创建了一个CalculatorTest类,它包含了一个测试方法testAdd。这个方法就像是一个小剧本,指导我们的代码如何进行表演。

2.3 断言(Assertions)与匹配器(Matchers):道具和特效

断言和匹配器是测试中的道具和特效。它们帮助我们验证演员的表演是否符合预期。

断言是测试中的核心,它用来验证代码的输出是否符合预期。比如,在上面的例子中,assertEquals就是一个断言,它检查calculator.add(2, 3)的结果是否等于5。

匹配器则提供了更灵活的验证方式。它们可以检查对象的属性,或者验证集合中是否包含特定的元素。

2.4 参数化测试(Parameterized Tests):多场景测试

参数化测试就像是电影中的多场景拍摄,它允许你用不同的参数运行同一个测试方法,从而覆盖更多的测试场景。

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;public class CalculatorParameterizedTest {private final Calculator calculator;private final int a;private final int b;private final int expected;public CalculatorParameterizedTest(int a, int b, int expected) {this.calculator = new Calculator();this.a = a;this.b = b;this.expected = expected;}@ParameterizedTest@MethodSource("data")public void testAdd(int a, int b, int expected) {int result = calculator.add(a, b);assertEquals(expected, result, "Should add correctly");}static Stream<Object[]> data() {return Stream.of(new Object[]{2, 3, 5},new Object[]{5, 5, 10},new Object[]{-1, 1, 0});}
}

在这个例子中,我们使用了@ParameterizedTest@MethodSource注解来创建参数化测试。这样,我们可以为testAdd方法提供不同的输入参数,从而测试不同的加法场景。

2.5 嵌套测试与生命周期管理:导演的剪辑室

嵌套测试和生命周期管理就像是导演的剪辑室,它们允许你在测试中进行更精细的控制。

嵌套测试可以让你在一个测试类中创建多个测试场景,而生命周期管理则允许你在测试前后执行特定的代码,比如初始化和清理资源。

在这一章中,我们深入了解了JUnit 5的新特性,学会了如何编写基本的单元测试案例,使用断言和匹配器来验证代码的正确性,并通过参数化测试来覆盖更多的测试场景。下一章,我们将进入集成测试的世界,模拟外部服务,让测试更加贴近真实的应用场景。敬请期待,我们的测试之旅还在继续!
在这里插入图片描述

第3章:集成测试和模拟外部服务,让代码在真实世界中起舞

3.1 SpringBootTest注解与测试切面:导演的镜头

在单元测试的舞台上,我们的代码已经能够独舞。但真正的挑战在于集成测试——这是让代码在真实世界中起舞的时刻。@SpringBootTest注解就像是导演的镜头,它帮助我们把镜头拉宽,从宏观的角度审视整个应用。

使用@SpringBootTest,我们可以启动整个Spring应用上下文,就像是一个完整的电影场景,让我们的代码在更广阔的舞台上表演。这不仅包括了我们的业务逻辑,还有那些与外部世界交互的部分。

3.2 使用@MockBean与@SpyBean模拟Bean:特效化妆师

在电影中,特效化妆师能够创造出令人难以置信的角色。在SpringBoot的集成测试中,@MockBean@SpyBean就扮演了这样的角色。

@MockBean允许我们创建模拟对象,这些对象可以替代真实的外部服务或组件。就像特效化妆师为演员准备的面具,它们可以模拟任何行为,让我们的测试不受外部依赖的影响。

@SpringBootTest
public class ServiceIntegrationTest {@MockBeanprivate ExternalService externalService;@Testpublic void testService() {// 设置模拟对象的行为Mockito.when(externalService.getData()).thenReturn("Mocked Data");// 测试服务调用String result = service.getDataFromExternalService();assertEquals("Mocked Data", result);}
}

在这个例子中,我们使用@MockBean创建了一个模拟的ExternalService,然后在测试中验证我们的服务是否正确地使用了这个模拟对象。

3.3 配置文件与Profile在集成测试中的运用:场景切换

在电影拍摄中,场景切换是讲述故事的关键。在集成测试中,配置文件和Profile也扮演着类似的角色。

我们可以通过不同的配置文件和Profile来模拟不同的环境,比如开发环境、测试环境和生产环境。这就像是导演根据不同的剧本场景来调整拍摄设置。

@SpringBootTest(properties = "some.property=value")
public class ConfigIntegrationTest {// 测试代码
}

在这个例子中,我们通过properties属性指定了特定的配置,就像导演根据剧本调整场景设置。

3.4 外部服务模拟(MockMvc, RestTemplate, WebClient):与外界的对话

在电影中,对话是推动剧情发展的关键。在集成测试中,与外部服务的交互就像是与外界的对话。

SpringBoot提供了多种工具来模拟和测试这些交互,比如MockMvc用于模拟Web请求,RestTemplateWebClient用于模拟HTTP客户端。

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
public class WebControllerTest {@Autowiredprivate MockMvc mockMvc;@Testpublic void testController() throws Exception {mockMvc.perform(get("/api/data")).andExpect(status().isOk()).andExpect(content().string("Expected Response"));}
}

在这个例子中,我们使用MockMvc来模拟对Web控制器的请求,并验证响应是否符合预期。

3.5 数据库测试策略:In-Memory与Testcontainers:电影中的特效场景

在电影中,特效场景往往最为震撼。在集成测试中,数据库测试就像是这些特效场景,它们需要特别的处理。

SpringBoot支持使用In-Memory数据库进行快速测试,这就像是在电影中使用绿幕技术,可以快速创建出任何你想要的场景。

@SpringBootTest
public class RepositoryIntegrationTest {@Autowiredprivate UserRepository userRepository;@Testpublic void testFindByName() {userRepository.save(new User("Alice"));assertEquals("Alice", userRepository.findByUsername("Alice").map(User::getUsername).orElse(null));}
}

此外,Testcontainers可以帮助我们在容器中运行数据库,这就像是在电影中搭建真实的场景,让我们的测试更加贴近生产环境。


在这一章中,我们探索了集成测试的世界,学习了如何使用@SpringBootTest启动整个应用上下文,如何使用@MockBean@SpyBean来模拟外部服务,如何通过配置文件和Profile来模拟不同的环境,以及如何使用MockMvcRestTemplateWebClient来模拟外部服务的交互。我们还讨论了数据库测试策略,包括In-Memory数据库和Testcontainers的使用。

随着我们的测试之旅逐渐深入,我们不仅学会了如何在单元测试中让代码独舞,还学会了如何在集成测试中让代码在真实世界中起舞。下一章,我们将总结SpringBoot的测试策略,并展望持续集成与自动化测试的未来。敬请期待,我们的旅程还在继续!

第4章:结论,测试之旅的收获与未来

SpringBoot测试策略总结:回顾我们的旅程

随着我们的测试之旅接近尾声,是时候回顾一下我们所学到的知识和技能了。SpringBoot的测试策略就像是一张地图,指引我们在代码的海洋中航行。

从基础的测试环境配置开始,我们学会了如何搭建舞台,让代码在这个环境中自由地表演。接着,我们通过JUnit 5的新特性,编写了基本的单元测试案例,使用断言和匹配器来验证代码的正确性,并通过参数化测试来覆盖更多的测试场景。

然后,我们进入了集成测试的世界,学习了如何使用@SpringBootTest注解启动整个Spring应用上下文,如何使用@MockBean@SpyBean来模拟外部服务,以及如何通过配置文件和Profile来模拟不同的环境。我们还探讨了如何使用MockMvcRestTemplateWebClient来模拟外部服务的交互,以及如何使用In-Memory数据库和Testcontainers来进行数据库测试。

测试对软件质量的影响:质量的守护者

测试就像是电影的质量控制,它确保了最终产品能够满足观众的期望。在软件开发中,测试同样扮演着质量的守护者角色。

通过测试,我们能够及时发现并修复代码中的错误和缺陷,确保软件的稳定性和可靠性。同时,测试也帮助我们验证软件的功能是否符合需求,是否能够满足用户的需求。

更重要的是,测试提高了开发团队的效率。通过自动化测试,我们能够快速地进行回归测试,确保新代码的引入不会破坏已有的功能。这使得开发团队能够更加自信地进行迭代和发布。

持续集成与自动化测试的未来展望:未来的测试之旅

随着技术的不断发展,持续集成和自动化测试已经成为了软件开发的重要趋势。在未来,我们有理由相信,测试将变得更加智能和自动化。

借助于人工智能和机器学习技术,测试工具将能够自动识别潜在的问题,并提供更加精确的测试建议。同时,云平台和容器技术的发展也将使得测试环境的搭建和维护变得更加简单和高效。

此外,随着微服务架构的普及,测试也将面临新的挑战和机遇。如何在分布式系统中进行有效的集成测试,如何确保服务之间的兼容性和稳定性,将成为测试领域需要解决的问题。

在这里插入图片描述

随着我们的测试之旅结束,我们不仅学会了如何使用SpringBoot进行测试,还对测试的重要性和未来趋势有了更深入的理解。测试不仅仅是软件开发的一个环节,它更是质量的守护者,是推动软件开发进步的重要力量。

在未来的测试之旅中,我们有理由相信,测试将变得更加智能、自动化,并将更好地服务于软件开发的各个环节。让我们一起期待并拥抱这个充满机遇和挑战的未来吧!


参考文献

[1] Spring Boot Testing Documentation

这是Spring Boot官方提供的测试文档,详细介绍了Spring Boot框架中测试的各种方法和最佳实践。它为开发者提供了如何在Spring Boot应用中进行单元测试和集成测试的指南。

[2] JUnit 5 User Guide

JUnit 5用户指南提供了JUnit 5测试框架的全面介绍,包括其新特性、断言库、参数化测试以及测试生命周期管理等方面的内容。它是编写JUnit 5测试用例的重要参考资料。

[3] MockMvc Documentation

MockMvc文档详细说明了如何在Spring MVC应用中使用MockMvc来模拟和测试Web层。它是进行Web应用集成测试时不可或缺的资源。

[4] Testcontainers GitHub Repository

Testcontainers是一个Java库,用于在容器中运行测试,从而提供一致的测试环境。它的GitHub仓库包含了关于如何使用Testcontainers进行数据库和外部服务测试的示例和文档。

[5] Effective Integration Testing for Microservices with Spring Boot

这篇文章探讨了在微服务架构下,如何有效地进行Spring Boot应用的集成测试。它提供了一些实用的策略和技巧,帮助开发者构建健壮的测试。

相关文章:

代码界的奥斯卡:SpringBoot测试的艺术与科学

探索SpringBoot测试的神秘世界&#xff0c;揭秘如何成为代码质量的守护神&#xff01;从基础环境搭建到高级集成测试&#xff0c;本系列教程带你一步步构建坚不可摧的测试防线。深入JUnit 5的强大功能&#xff0c;学习如何用MockMvc和Testcontainers打造逼真的测试场景。准备好…...

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案

未成年人被誉为祖国的花朵&#xff0c;是我们国家的未来。然而&#xff0c;最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍&#xff0c;事态恶劣&#xff0c;引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…...

Python | 平均绩点

字符串的概念和特点 字符串既可以使用单引号&#xff0c;也可以使用双引号""来创建 可以使用运算符来拼接字符串&#xff0c;并返回字符串拼接后的结果。 first_name "Tom" last_name "Jerry" full_name first_name " " &quo…...

2024年有什么值得入手的5G长期套餐大流量卡推荐?大流量手机卡入手指南(超4款正规手机卡实测总结)

前言 24年有什么值得入手的5G大流量卡推荐&#xff1f;大流量手机卡入手指南&#xff08;超4款正规手机卡实测总结&#xff09; 四大运营商有哪些大流量卡&#xff0c;可电话&#xff0c;非物联网卡 所有卡激活后&#xff0c;均可以在官方app可查、 所有都是优惠长期 5G大流…...

《尚上优选》项目Bug记录

写在前面 本项目为该系列第二个项目&#xff0c;有一些问题如果没有在本文摘录&#xff0c;可以到 《云尚办公》项目 BUG记录 中查找是否有类似的解决方案。 &#xff08;2024.3.24以下&#xff09; (P11) 管理端前端node20版本启动报OpenSSL错误 经典问题&#xff0c;把we…...

Flutter 中的 PopupMenuTheme 小部件:全面指南

Flutter 中的 PopupMenuTheme 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它允许开发者使用 Dart 语言构建美观、响应式的移动、Web 和桌面应用。Flutter 的 Material 组件库中包含了丰富的 UI 组件&#xff0c;其中 PopupMenuButt…...

uni-app的网络请求库封装及使用(同时支持微信小程序)

其实uni-app中内置的uni.request()已经很强大了&#xff0c;简单且好用。为了让其更好用&#xff0c;同时支持拦截器&#xff0c;支持Promise 写法&#xff0c;特对其进行封装。同时支持H5和小程序环境&#xff0c;更好用啦。文中给出使用示例&#xff0c;可以看到使用变得如此…...

力扣524. 通过删除字母匹配到字典里最长单词

给你一个字符串 s 和一个字符串数组 dictionary &#xff0c;找出并返回 dictionary 中最长的字符串&#xff0c;该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个&#xff0c;返回长度最长且字母序最小的字符串。如果答案不存在&#xff0c;则返回空字符串。 示…...

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…...

解决 git 命令 Problem with the SSL CA cert (path? access rights?)

/etc/pki/nssdb 错误 运行命令&#xff1a; GIT_CURL_VERBOSE1 git clone git_repo_url 会输出详细错误信息 Cloning into fp_sdk... * Couldnt find host xxx.com in the .netrc file; using defaults * About to connect() to xxx.com port 443 (#0) * Trying 10.44.52.7…...

详解:重庆耶非凡的选品师项目有哪些优势?

在竞争激烈的电商市场中&#xff0c;重庆耶非凡科技有限公司凭借其独特的选品师项目&#xff0c;成功地在众多企业中脱颖而出。这一项目不仅体现了公司对市场趋势的敏锐洞察力&#xff0c;更彰显了其专业的选品能力和对消费者需求的深刻理解。 首先&#xff0c;耶非凡的选品师项…...

DSP28335模块配置模板系列——GPIO配置模板

在自己的电脑上构建出一套模块配置模板&#xff0c;可以大幅节省DSP程序开发时间&#xff0c;从而达到事半功倍的效果。对于初学者&#xff0c;掌握了模块配置&#xff0c;也就能实现大部分的单片机功能。 在DSP28335模块配置模板系列&#xff0c;不仅会给出GPIO、ADC、EQEP、E…...

【SringBoot项目中MyBatis-Plus多数据源应用实践】

文章目录 前言 一、Mybatis-Plus是什么&#xff1f; 二、多数据源是什么&#xff1f; 三、使用步骤 1. 新建一个SpringBoot项目 2. 引入必要的MyBatis架包 3. 新建两个数据库及两张表 3.3.1 新建数据库&#xff1a;DB_A&#xff0c;并创建一张数据表alarm_kind&#xff0c;以及…...

Android 图表开发开源库 MPAndroidChart 使用总结

1. 引言 电视项目中需要一个折线图表示节电数据变化情况&#xff0c;类比 H5 来说&#xff0c;Android 中也应该有比较成熟的控件&#xff0c;经过调研后&#xff0c;发现 MPAndroidChart 功能比较强大&#xff0c;网上也有人说可能是目前 Android 开发最好用的一个三方库了&a…...

手机号脱敏

手机号脱敏 // 手机号脱敏subTelephone(telphone) {let result telphone.substr(0, 4) **** telphone.substr(8);return result;},...

java基础篇(1)

JDK是什么?有哪些内容组成?JDK是Java开发工具包 JVM虚拟机: Java程序运行的地方 核心类库: Java已经写好的东西&#xff0c;我们可以直接用开发工具: javac、java、jdb、jhat.. JRE是什么?有哪些内容组成? JRE是Java运行环境 JVM、核心类库、运行工具 JDK&#xff0c;JRE&…...

2022年全国职业院校技能大赛高职组“信息安全管理与评估”赛项第三阶段任务书

第三阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第三阶段试题。根据信息安全管理与评估项目技术文件要求&#xff0c;第三阶段为夺旗挑战CTF&#xff08;网络安全渗透&#xff09;。 本次比赛时间为180分钟。 介绍 夺旗挑战赛&#xff08;CTF&#xff09;的目标…...

微信小程序蓝牙连接部分Android14调用wx.setBLEMTU协商低功耗最大传输单元失败解决方案(部分安卓14设置超过23就会报错)

1.解决方案的核心内容&#xff1a;第一次设置失败不要管&#xff0c;在complate函数里面继续往下连接&#xff0c;然后设置一个定时器每1秒钟在重新设置一次&#xff0c;肯定会成功的&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…...

PDF格式分析(八十二)——电影注释(movie)

电影注释(PDF1.2及其以上版本)&#xff0c;该注释包含图像和声音&#xff0c;声音通过扬声器进行播放&#xff0c;图像则显示在计算机屏幕上&#xff0c;如同一个视频播放器一样。当该类型注释被激活时&#xff0c;视频将被播放。 下表将显示电影注释的字典条目&#xff1a; 条…...

Opentracing 代码Demo

背景 OpenTracing 是一个提供标准化分布式追踪功能的API和工具。它的主要作用包括: 跨系统边界追踪请求流程:OpenTracing 允许开发者跟踪一个请求从开始到结束在整个分布式系统中的所有经过的点(包括异构系统),帮助理解系统中的请求流程和服务间的相互依赖。 性能分析和瓶…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...