Maven Surefire与Failsafe插件实现单元测试与集成测试分离的完整指南
1. 项目概述为什么我们需要分离单元测试与集成测试在Java后端开发中测试是保证代码质量的基石。但很多团队尤其是项目初期往往会把所有测试一股脑地扔给Maven Surefire插件去执行。这会导致一个典型问题你的单元测试Unit Test和集成测试Integration Test混在一起跑。想象一下你只是改了一行业务逻辑想快速验证一下结果Maven的mvn test命令触发了所有测试包括那些需要启动数据库、连接外部服务的集成测试。等待时间从几秒变成了几分钟甚至十几分钟开发反馈循环被严重拖慢效率低下。这就是“Maven Surefire Failsafe 单元/集成测试分离”要解决的核心痛点。它不是一个新概念但却是构建高效、可靠CI/CD流水线和提升开发者体验的关键实践。Surefire插件负责在test生命周期阶段执行那些快速、独立、不依赖外部环境的单元测试而Failsafe插件则专门用于在integration-test和verify阶段执行集成测试这类测试可能涉及启动完整的应用上下文、操作数据库或调用第三方API。Failsafe插件的一个关键特性是即使在集成测试失败时它也不会中断Maven构建的生命周期从而确保pre-integration-test和post-integration-test阶段例如启动/停止外部服务能够完整执行这为测试环境的清理和资源回收提供了保障。简单来说分离的目的就是“物以类聚测以速分”。让快的测试更快反馈让慢的测试在合适的时机、以更安全的方式运行。这不仅关乎速度更关乎测试套件的稳定性和构建过程的可靠性。接下来我将结合一个典型的Spring Boot项目从头拆解如何实现这种分离并分享我在多个项目中趟过的坑和积累的技巧。2. 核心思路与插件职责深度解析要实现清晰的测试分离首先必须透彻理解Maven的构建生命周期以及Surefire和Failsafe这两个核心插件的设计哲学和默认行为。很多配置上的困惑都源于对它们“默认约定”的不了解。2.1 Maven构建生命周期与测试阶段Maven的生命周期是理解一切的基础。与测试相关的几个关键阶段如下test: 这个阶段用于执行单元测试。默认绑定的是maven-surefire-plugin插件。pre-integration-test: 集成测试前的准备阶段例如启动Docker容器、初始化测试数据库、部署WAR包到嵌入式服务器等。integration-test: 执行集成测试。默认情况下Maven核心并未绑定任何插件到此阶段。这正是maven-failsafe-plugin大显身手的地方我们需要显式配置它绑定到此阶段。post-integration-test: 集成测试后的清理阶段例如停止容器、清理测试数据。verify: 检查集成测试的结果。failsafe-plugin会在此阶段验证集成测试是否通过并生成报告。关键点在于mvn test命令只运行到test阶段。而mvn verify命令会顺序执行test,pre-integration-test,integration-test,post-integration-test,verify所有阶段。因此我们通常用mvn verify来运行完整的测试套件单元集成而mvn test仅用于快速运行单元测试。2.2 Surefire 与 Failsafe 的默认约定与区别这两个插件非常相似但设计目的不同导致了关键的行为差异。maven-surefire-plugin(用于单元测试):目标:surefire:test默认绑定阶段:test默认包含的测试类名模式:**/Test*.java,**/*Test.java,**/*Tests.java,**/*TestCase.java失败行为: 一旦有测试失败立即终止构建过程。这对于快速失败的单元测试是合理的。报告位置:target/surefire-reports/maven-failsafe-plugin(用于集成测试):目标:failsafe:integration-test,failsafe:verify默认绑定阶段: 无默认绑定需手动配置到integration-test和verify阶段。默认包含的测试类名模式:**/IT*.java,**/*IT.java,**/*ITCase.java失败行为: 在integration-test阶段即使测试失败也不会终止构建从而保证post-integration-test清理阶段一定能执行。真正的失败检查是在verify阶段。报告位置:target/failsafe-reports/注意这里的命名约定*Testvs*IT是社区最佳实践也是插件默认的识别方式。遵循这个约定可以省去大量繁琐的配置。我强烈建议你遵守它除非有极强的历史包袱。2.3 分离方案的整体设计思路基于以上理解我们的设计方案非常清晰职责划分: 使用Surefire运行所有以Test结尾的单元测试使用Failsafe运行所有以IT结尾的集成测试。生命周期绑定: 在POM中显式配置Failsafe插件将其integration-test和verify目标绑定到对应的Maven阶段。环境管理: 在pre-integration-test阶段准备集成测试环境如Testcontainers启动数据库在post-integration-test阶段进行清理。灵活执行: 开发者可以通过mvn test快速验证单元逻辑CI/CD流水线通过mvn verify进行完整验证。这个方案的美妙之处在于它几乎不需要改变测试代码本身只需通过构建配置和命名约定就能实现物理和逻辑上的完美分离。3. 实战配置从零搭建分离的测试体系理论讲完了我们动手配置。假设我们有一个标准的Spring Boot 2.7项目。以下是pom.xml中关键配置的详细拆解。3.1 基础插件配置与绑定首先确保你的pom.xml的buildplugins部分包含以下配置。通常Surefire插件Spring Boot父工程已经管理但我们为了清晰说明也一并列出。build plugins !-- 1. Surefire 插件配置 (通常使用默认即可这里为演示做显式配置) -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-surefire-plugin/artifactId version3.0.0-M7/version !-- 建议使用较新版本 -- configuration !-- 排除集成测试确保Surefire只跑单元测试 -- excludes exclude**/*IT.java/exclude /excludes !-- 可选配置测试报告格式、并行测试等 -- parallelmethods/parallel threadCount4/threadCount /configuration /plugin !-- 2. Failsafe 插件配置 -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-failsafe-plugin/artifactId version3.0.0-M7/version executions !-- 关键绑定目标到生命周期阶段 -- execution idintegration-tests/id goals goalintegration-test/goal goalverify/goal /goals phaseintegration-test/phase !-- 指定在integration-test阶段执行integration-test目标 -- /execution /executions configuration !-- 包含集成测试排除单元测试通常按命名约定即可此为显式配置 -- includes include**/*IT.java/include /includes excludes exclude**/Test*.java/exclude exclude**/*Test.java/exclude /excludes !-- 如果你的集成测试需要系统属性 -- systemPropertyVariables spring.profiles.activeit/spring.profiles.active /systemPropertyVariables /configuration /plugin /plugins /build配置要点解析版本号建议使用较新的稳定版本以获得更好的性能和特性如JUnit 5支持、并行测试。excludes/includes在Surefire中排除*IT.java在Failsafe中包含*IT.java并排除*Test.java这是实现物理分离的双保险。即使有人不按命名规则创建文件也能通过配置强制纠正。executions这是Failsafe插件的核心。我们将integration-test和verify两个目标绑定到integration-test阶段。注意verify目标本身属于verify阶段但通过这个配置它会在integration-test阶段被准备并在真正的verify阶段执行校验。systemPropertyVariables这是一个非常实用的配置。你可以在这里为集成测试设置特定的系统属性比如激活一个itintegration-testprofile让Spring Boot加载不同的配置文件如application-it.yml用于配置集成测试专用的数据库连接、服务端口等。3.2 测试代码的组织与命名约定配置好后测试代码的组织就很简单了单元测试放在src/test/java目录下类名以Test结尾。例如UserServiceTest.java。集成测试同样放在src/test/java目录下类名以IT结尾。例如UserControllerIT.java。为什么都放在src/test/java因为Maven标准目录结构约定如此且两者都是测试代码只是类型不同。放在一起便于管理并通过命名和插件配置自然区分。一个典型的集成测试 (UserControllerIT.java) 可能长这样import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.test.web.servlet.result.MockMvcResultMatchers.status; // 关键注解使用 IT 后缀Spring Boot 会启动一个真实的服务器默认随机端口 SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.RANDOM_PORT) AutoConfigureMockMvc ActiveProfiles(it) // 激活 it profile使用 application-it.yml 配置 public class UserControllerIT { Autowired private MockMvc mockMvc; Test public void getUserById_ShouldReturnUser() throws Exception { // 这里可能依赖于一个由 pre-integration-test 阶段准备好的测试数据库 mockMvc.perform(get(/api/users/1)) .andExpect(status().isOk()); // ... 更多断言 } }3.3 集成测试环境管理以Testcontainers为例纯Web层的集成测试或许用MockMvc就够了但涉及数据库的集成测试需要一个真实、隔离的数据库实例。这里推荐Testcontainers它能在pre-integration-test阶段启动一个Docker容器如PostgreSQL并在post-integration-test阶段自动清理。首先在pom.xml中添加依赖dependency groupIdorg.testcontainers/groupId artifactIdtestcontainers/artifactId version1.17.6/version scopetest/scope /dependency dependency groupIdorg.testcontainers/groupId artifactIdjunit-jupiter/artifactId version1.17.6/version scopetest/scope /dependency dependency groupIdorg.testcontainers/groupId artifactIdpostgresql/artifactId version1.17.6/version scopetest/scope /dependency然后创建一个抽象基类或使用Testcontainers注解。更优雅的方式是利用Spring Boot 2.3对Testcontainers的支持在application-it.yml中动态配置# src/test/resources/application-it.yml spring: datasource: url: jdbc:tc:postgresql:14-alpine:///testdb?TC_INITSCRIPTfile:src/test/resources/init-test-data.sql driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver这样当使用itprofile启动时Spring Boot会自动通过Testcontainers JDBC URL启动一个PostgreSQL容器并执行指定的初始化脚本。这一切无需在测试类中编写任何容器管理代码实现了环境管理的声明式配置。实操心得对于复杂的多服务集成测试可以考虑使用Container注解和DockerComposeContainer来启动整个docker-compose定义的服务栈。关键是要确保这些容器的启动逻辑在pre-integration-test阶段或通过BeforeAll完成并在测试后妥善关闭。4. 高级技巧与常见问题排查掌握了基本配置后下面这些技巧和坑点能让你玩得更转。4.1 并行测试执行优化当测试套件规模增长后执行时间会成为瓶颈。Surefire和Failsafe都支持并行测试。在Surefire中启用并行单元测试configuration parallelmethods/parallel threadCount4/threadCount perCoreThreadCountfalse/perCoreThreadCount /configurationparallel可选值有methods,classes,both,suites等。methods是最细粒度的并行但要注意测试方法之间的独立性避免共享状态导致随机失败。Failsafe的并行配置类似但要更谨慎因为集成测试通常更重资源竞争更激烈。建议先从classes级别并行开始并控制线程数。注意事项并行测试会使得测试执行顺序不确定任何对执行顺序的隐式依赖都会导致测试“时好时坏”。务必确保测试是独立的使用BeforeEach/AfterEach来初始化和清理测试状态而非依赖BeforeAll设置的全局状态除非你能处理好并发。4.2 Profile与配置的精细控制通过Maven Profile和Spring Profile的组合可以实现测试环境的灵活切换。在pom.xml中定义Maven Profileprofiles profile idfast/id properties skip.integration.teststrue/skip.integration.tests /properties /profile profile idfull/id properties skip.integration.testsfalse/skip.integration.tests /properties /profile /profiles在Failsafe插件配置中引用configuration skipTests${skip.integration.tests}/skipTests /configuration这样运行mvn verify -Pfast就会跳过集成测试而mvn verify -Pfull则会执行全部。在Spring侧通过ActiveProfiles(it)注解可以轻松让集成测试加载application-it.yml其中可以配置嵌入式数据库、Mock服务地址等与本地开发环境完全隔离。4.3 常见问题与解决方案速查表在实际操作中你肯定会遇到一些问题。下面这个表格整理了我遇到过的典型情况问题现象可能原因解决方案运行mvn test时*IT.java测试也被执行了。1. Surefire配置未排除*IT。2. 测试类命名不符合约定如用了IntegrationTest.java。1. 检查并添加exclude**/*IT.java/exclude到Surefire配置。2. 统一使用*IT.java命名或在配置中明确排除其他模式。运行mvn verify时集成测试没有运行。1. Failsafe插件未正确绑定到integration-test阶段。2. 集成测试类名不是*IT.java且Failsafe配置未包含。1. 检查executions配置确保integration-test目标绑定到了integration-test阶段。2. 遵循命名约定或修改Failsafe的includes配置。集成测试失败后外部服务如Docker容器没有停止。post-integration-test阶段的清理逻辑依赖于integration-test阶段成功而Failsafe在该阶段失败时不会中断构建。但如果测试框架或你的代码抛出了Error而非TestFailure可能导致线程中断清理代码未执行。1. 确保清理逻辑如AfterAll方法健壮能捕获所有异常。2. 考虑使用testFailureIgnoretrue/testFailureIgnore配置Failsafe但这会忽略所有测试失败慎用。更好的方式是确保资源管理如Testcontainers本身是可靠的。集成测试运行非常慢。1. 每个测试类都重新启动Spring上下文。2. 没有使用并行测试。3. 外部服务如数据库连接慢。1. 使用SpringBootTest的properties或TestPropertySource减少不必要的配置加载或使用DirtiesContext策略。2. 考虑在Failsafe中启用parallel执行。3. 优化测试数据库配置使用本地容器而非远程服务。在IDE如IntelliJ IDEA中直接运行*IT.java测试失败。IDE默认使用Surefire插件来运行所有测试而集成测试可能需要itprofile或特定的系统属性。1. 在IDE的Run Configuration中手动添加VM选项-Dspring.profiles.activeit。2. 更好的办法为集成测试创建一个专门的JUnit运行模板统一配置激活的Profile和系统属性。mvn clean verify报告“找不到主类”或Spring上下文启动失败。可能pre-integration-test阶段需要打包如生成可执行的jar但package阶段在test之后、integration-test之前。如果打包失败或路径不对会导致后续阶段失败。确保mvn package能独立成功。检查spring-boot-maven-plugin的配置确保能生成正确的可执行jar。在pre-integration-test阶段可以通过maven-dependency-plugin或maven-resources-plugin将打包好的jar复制到指定位置。4.4 与CI/CD流水线的集成在持续集成环境中这种分离策略的价值最大化。一个典型的CI流水线步骤可以是代码检出。编译与单元测试mvn clean test。这一步必须快速给出初步质量反馈。如果失败直接终止流水线。打包mvn package -DskipTests因为上一步已运行单元测试。集成测试环境准备在pre-integration-test阶段由Failsafe插件触发启动所有依赖服务。运行集成测试Failsafe执行*IT测试。环境清理post-integration-test阶段无论测试成功与否都清理环境。验证与报告verify阶段检查集成测试结果生成报告。如果失败CI任务标记为失败。通过将mvn verify作为CI的最终测试阶段命令你可以确保整个测试生命周期被完整、正确地执行。5. 总结与个人实践建议经过以上配置和实践你的Java项目就拥有了一套清晰、高效、可靠的测试执行体系。单元测试作为守护代码逻辑的第一道快速防线集成测试作为验证组件协作和系统行为的更重量级保障两者各司其职互不干扰。从我个人的经验来看有几点额外的建议保持测试独立性是黄金法则无论是单元测试还是集成测试都要极力避免测试间的依赖和顺序假设。这是实现稳定、可并行测试套件的前提。合理利用Mock与真实服务单元测试应大量使用Mock集成测试则应尽量使用真实或接近真实的环境如Testcontainers提供的数据库。避免在集成测试中过度Mock否则就失去了“集成”的意义。投资于测试数据管理集成测试的数据准备和清理是难点。可以使用Flyway或Liquibase来管理测试数据库的schema并结合Sql注解或程序化的数据准备工具如DbUnit来管理测试数据确保每次测试都在一个已知的状态下开始。监控测试执行时间定期查看Surefire和Failsafe生成的报告关注执行时间过长的测试用例。对于慢速的集成测试考虑是否能将其重构为更小粒度的测试或者是否值得为它们单独设立一个 nightly夜间测试套件而不阻塞每次提交的快速反馈。最后记住工具是为人服务的。Surefire和Failsafe的分离配置只是手段最终目的是为了提升开发效率和软件质量。根据你团队和项目的实际情况灵活调整配置的严格程度找到最适合你们的那把尺。

相关新闻

自注意力机制原理与Transformer模型实践指南

自注意力机制原理与Transformer模型实践指南

1. 从生活场景理解自注意力机制想象你正在阅读一本侦探小说,主角在犯罪现场发现了几十个线索。普通人的做法可能是按顺序逐个查看每个线索,但侦探会怎么做?他会快速扫视所有线索,然后:重点关注带血的匕首(相…

2026/7/29 3:26:31阅读更多 →
Qt6自定义QML组件加载失败:从原理到CMake配置的完整解决方案

Qt6自定义QML组件加载失败:从原理到CMake配置的完整解决方案

1. 从一次“文件找不到”的报错说起 最近在把项目从 Qt5 升级到 Qt6 的过程中,我遇到了一个挺典型的坑:在尝试加载一个自定义的 QML 文件时,程序直接崩溃了,控制台抛出的错误信息是 file:///.../MyCustomComponent.qml: No such …

2026/7/29 3:26:31阅读更多 →
Brocade 交换机进入 EOS 后,为什么有些命令不能使用?

Brocade 交换机进入 EOS 后,为什么有些命令不能使用?

写在前面近期越来越多的用户反馈在维护 Brocade 光纤交换机时,会发现原来可以执行的命令突然失败,例如:This product has passed its End of Support date and functionality has been restricted.Please contact your Service Provider for …

2026/7/29 3:26:31阅读更多 →
MyBatis动态SQL安全实践:${}与#{}的深度解析与SQL注入防御

MyBatis动态SQL安全实践:${}与#{}的深度解析与SQL注入防御

1. 项目概述:从一道课后习题到企业级安全实践最近在辅导团队新人学习Java EE,特别是MyBatis框架时,总会遇到第三章关于动态SQL的课后习题。这些习题看似基础,但往往藏着许多新手乃至有一定经验的开发者都容易忽略的“坑”。尤其是…

2026/7/29 4:43:12阅读更多 →
Windows DNS缓存查看与管理:原理、命令与实战排查指南

Windows DNS缓存查看与管理:原理、命令与实战排查指南

1. 项目概述:为什么需要查看Windows DNS缓存?当你访问一个网站,比如www.example.com,你的电脑并不会直接知道这个域名对应哪台服务器。它需要先问路,这个“问路”的过程就是域名解析,而负责指路的“交通警察…

2026/7/29 4:43:12阅读更多 →
C++/QT实现与MATLAB一致的短时傅里叶变换(STFT)时频分析

C++/QT实现与MATLAB一致的短时傅里叶变换(STFT)时频分析

1. 项目概述与核心价值最近在做一个音频信号分析相关的项目,需要把一段时域信号转换成时频图来观察频率成分随时间的变化。这个需求在语音识别、故障诊断、音乐分析里太常见了,业内标准工具就是短时傅里叶变换。项目初期为了快速验证算法,我直…

2026/7/29 4:43:12阅读更多 →
VMware Horizon 8.0入门④--AD域服务器部署

VMware Horizon 8.0入门④--AD域服务器部署

编辑AD域控制器的配置 注意:为了提升性能,请在部署完毕后再更改配置 关闭虚拟机,点击编辑设置 设置2个CPU和1G内存,点击确定 准备环境 开启远程桌面 弹出光盘 检查防火墙是否关闭 在导航栏输入wf.msc 点击属性关闭域、专用和公用配置文件 设置主机名 右键此电脑->更…

2026/7/29 4:43:12阅读更多 →
运算放大器共模抑制比(CMRR)原理、实战选型与设计避坑指南

运算放大器共模抑制比(CMRR)原理、实战选型与设计避坑指南

1. 项目概述:为什么“共模抑制比”是运放设计的命门?在模拟电路设计的江湖里,运算放大器(运放)无疑是当之无愧的“内功心法”。无论是做信号调理、精密测量,还是音频处理、电源管理,你几乎都绕不…

2026/7/29 4:43:12阅读更多 →
Tkinter事件驱动编程:从静态界面到动态交互的完整指南

Tkinter事件驱动编程:从静态界面到动态交互的完整指南

1. 从“会画”到“会动”:Tkinter事件驱动编程的核心如果你已经跟着上一篇教程,用Tkinter的Label、Button、Entry等基础控件搭出了一个静态的界面,那么恭喜你,你已经成功迈出了GUI编程的第一步。但很快你就会发现,一个…

2026/7/29 4:41:12阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →