junit 偷偷的执行了所有测试,把我坑惨了o(╥﹏╥)o

记录开发过程中的小坑

这是我在编写 Minio 的合并文件的时候遇到的一个小坑,由于我更新了IDEA版本,忘记去设置 Maven 的 Skip Tests

我想着在之前说的开源项目中的"文件存储服务"应该如何设计,支持本地、Minio、OSS、Kodo、COS... 中留一个 创建桶、断点续传、上传文件分片、合并文件(合并后删除文件)的单元测试,方便后续其他成员开发,结果在运行时出现了问题...

先了解编写的单元测试

  1. quickStart()方法:演示了如何上传单个文件到MinIO服务器。首先检查存储桶是否存在,如果不存在则创建新的存储桶。然后使用uploadObject()方法将文件上传到指定的存储桶中。

  2. chunkFiles()方法:演示了如何将大文件进行分片上传。首先定义分片大小(CHUNK_SIZE),然后读取源文件并按照分片大小将文件切分为多个分片。使用putObject()方法将每个分片上传到MinIO服务器,并生成每个分片的MD5值。

java 复制代码
@Test
public void chunkFiles() {
    // 1. Minio 最小合并大小 5MB , 所以测试存储 5MB
    int CHUNK_SIZE = 1024 * 1024 * 5;
    String sourceFilePath = "DMA传输.mp4";  // 需要分隔的文件
    // 2. 创建需要切片
        // 3. 读取 buffer 到缓冲区
            // 3.1 上传文件到 Minio
            // 3.2 生成一组 MD5
            
}
  1. mergeFile()方法:演示了如何合并分片文件。首先获取所有分片文件的名称,并使用composeObject()方法将这些分片文件合并为一个完整的文件。然后使用removeObjects()方法删除已合并的分片文件。
java 复制代码
@Test
public void mergeFile() throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
    // 1. 获取切片对象的名称
    // 2. 整合文件
    String mergedObjectName = "DMA传输.mp4";
    // 3. 删除文件
}

我想着测试一下 chunkFiles() 方法,结果到服务器上去查看,怎么多了一个 " DMA传输.mp4 " 的这个文件,我越想越不对劲,我不是没有执行 mergeFile() 吗?

然后我突发奇想...,很搞笑,这里和 jym 说说我的搞笑想法

离谱的思考

  1. MinIO服务器配置了版本控制:如果在MinIO服务器上启用了版本控制,删除操作可能只是将文件标记为删除,并不会立即从服务器中删除。相反,服务器会保留文件的旧版本,并在需要时自动恢复它们。

  2. 代码中存在其他操作导致文件恢复:确保在删除文件后没有其他代码或操作会导致文件恢复。(这时候还没有想过执行了 mergeFile() 方法)

  3. MinIO服务器配置了其他数据保护机制:MinIO服务器可能配置了其他数据保护机制,例如快照或备份。这些机制可以在文件删除后自动恢复文件。

哭了,我就这样想,都怪自己Minio没学好,如果是操作关系型数据和非关系型数据,我想我能早点发现我没有设置 Maven 的 Skip Tests,丢脸了。

解决方案

下面就贴出解决方案,就使用idea图形化操作了,不使用 maven 命令操作

  1. 第一种解决,一般在打包时其实也会关闭
  • 当设置为true时,Maven会跳过运行测试用例,并直接进行编译、打包和部署等构建操作
  1. 第二种解决,在 Settings 中配置
  1. 设置新项目中 Skip Tests
  • 点击后进行 2 的操作
相关推荐
做个文艺程序员8 小时前
流式输出(SSE)在 Spring Boot 中的实现【OpenClAW + Spring Boot 系列 第3篇】
java·spring boot·后端
俺爱吃萝卜9 小时前
Spring Boot 3 + JDK 17:新一代微服务架构最佳实践
java·spring boot·架构
做个文艺程序员9 小时前
Spring Boot 项目集成 OpenClAW【OpenClAW + Spring Boot 系列 第1篇】
java·人工智能·spring boot·开源
霸道流氓气质10 小时前
SpringBoot+LangChain4j+Ollama实现本地大模型语言LLM的搭建、集成和示例流程
java·spring boot·后端
MegaDataFlowers11 小时前
使用SpringBoot+MyBatis+MySQL完成后端的数据库增删改查(CRUD)操作
数据库·spring boot·mybatis
做个文艺程序员11 小时前
Spring Boot 封装 OpenClAW 服务层最佳实践【OpenClAW + Spring Boot 系列 第2篇】
java·人工智能·spring boot·开源
golang学习记11 小时前
☕️➡️🚀 Java 一键转 Kotlin?VS Code 这个新插件太香了!
intellij idea·visual studio code
2601_9498166811 小时前
如何在 Spring Boot 中配置数据库?
数据库·spring boot·后端
做个文艺程序员12 小时前
多轮对话与会话管理:构建上下文感知的 AI 接口【OpenClAW + Spring Boot 系列 第4篇】
人工智能·spring boot·开源
tang_jian_dong13 小时前
springboot + vue3 集成tianai.captcha验证码
java·spring boot·spring