用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在其上的7TB。
理想情况下,我们希望创建相同的文件结构以在Spring开发配置文件中使用Web应用程序,并在JUnit测试中使用这些文件结构。
介绍FileStructureCreator
我们首先创建一个新的类FileStructureCreator
,如下所示:
@Getter
@Setter
public class FileStructureCreator implements Closeable {public static final Path baseTestPath = Paths.get("testFiles");private Path fileStructureBasePath;public static FileStructureCreator create(Path file) {return createStructure(file, false);}public static FileStructureCreator createTempDirectory(Path file) {return createStructure(file, true);}@SneakyThrowsprivate static FileStructureCreator createStructure(Path file, boolean createTempDirectory) {FileStructureCreator fileStructureCreator = new FileStructureCreator();if (!Files.exists(baseTestPath)) {Files.createDirectory(baseTestPath);}String path = baseTestPath.toString() + (createTempDirectory ? "/" + UUID.randomUUID().toString() : "")+ "/";Path basePath = Paths.get(path);fileStructureCreator.setFileStructureBasePath(basePath);FileUtils.forceMkdir(basePath.toFile());try (Stream<String> stream = Files.lines(file)) {stream.forEach(line -> {Metadata fileMetaData = Metadata.from(line);Path fileEntry = Paths.get(path + fileMetaData.getWindowsSafeFilename());try {FileUtils.forceMkdir(fileEntry.getParent().toFile());if (!Files.exists(fileEntry)) {Files.write(fileEntry, line.getBytes());Files.setLastModifiedTime(fileEntry, FileTime.from(fileMetaData.getModificationTime()));}} catch (IOException ignore) {throw new RuntimeException("Exception creating directory: " + fileEntry.getParent());}});}return fileStructureCreator;}@Override@SneakyThrowspublic void close() {if (fileStructureBasePath != null) {FileUtils.deleteDirectory(fileStructureBasePath.toFile());}}
}
基本上,这将创建整个目录结构和必要的文件。 我们只需要传递一个包含文件结构元数据的基本文件即可。
元数据保存时间戳,文件大小和该文件的路径。 看起来像这样:
2016-04-05T10:30:15.012345678 5120backupftp/@eaDir/sharesnap_share_configuration/SYNO@.quota2018-02-26T00:00:09.012345678 169backupftp/@eaDir/sharesnap_share_configuration/share_configuration
然后,在Synology NAS上,我们可以通过执行以下命令轻松生成具有(特定)目录的整个树结构的文件:
find backupftp -type f -printf
"%TY-%Tm-%TdT%TH:%TM:%.12TS\t%s\t%p\n">test/backupftp.files.txt
将生成的文件从您的Synology NAS复制到您的项目。
在JUnit测试中,我们使用FileStructureCreator
类,如下面的示例所示。 请注意, FileStructureCreator
实现了AutoCloseable
,因此我们可以在测试完成后使用try / catch块来清理文件。
@Value("classpath:/TestDiskConsistencyPolicy-notEnoughFileSets.txt")
private Path notEnoughFileSets;@Test(expected = RuntimeException.class)
public void backupSetWithNoFileSetsThrowException() {try( FileStructureCreator creator = FileStructureCreator.createTempDirectory(notEnoughFileSets) ) {BackupSet backupSet = BackupSet.builder().uri(creator.getFileStructureBasePath().toString()).build();new DiskConsistencyPolicy(backupSet).execute();assertTrue( "Expecting a RuntimeException here", false);}
}
对于Spring Boot应用程序,我们只定义一个@Configuration
类,该类将为Synology NAS上定义的文件共享创建数据结构。
@Configuration
@Profile("dev")
public class TestFilesInstaller {@Beanpublic FileStructureCreator ftpFiles(@Value("classpath:/backupftp.files.txt") Path file) {return FileStructureCreator.create(file);}@Beanpublic FileStructureCreator nfsFiles(@Value("classpath:/backupnfs.files.txt") Path file) {return FileStructureCreator.create(file);}
}
因为它们被定义为@Bean
,所以在应用程序关闭时将自动调用close()
方法,并在Spring Boot应用程序停止时从磁盘上删除所有文件。
只是……不要在生产环境中运行开发人员资料; 我让你知道会发生什么。 ;-)
将来,我们将向您展示如何构建备份检查器以监视和验证NAS上的备份。
翻译自: https://www.javacodegeeks.com/2018/04/mocking-files-for-junit-testing-a-spring-boot-web-application-on-synology-nas.html
用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件相关推荐
- synology_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
synology 对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在该NAS上的7TB. 理想情 ...
- synology smb_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
synology smb 对于将在Synology RS815 + NAS上检查备份文件的Spring Boot应用程序,我们希望能够轻松测试此NAS上存储的文件,而不必复制存储在其上的7TB. 理想 ...
- Spring Boot Web应用程序中注册 Servlet 的方法实例
Spring Boot Web应用程序中注册 Servlet 的方法实例 本文实例工程源代码:https://github.com/KotlinSpringBoot/demo1_add_servlet ...
- 带有Gradle的Spring Boot Web应用程序
1.简介 在继续使用Gradle创建演示Spring Boot Web应用程序之前,我假设我们已经准备好使用Gradle设置 . 摇篮设置指南 Gradle官方网站 2.创建演示应用程序 现在我们已经 ...
- 使用Gradle禁止Java和Spring Boot Web应用程序中的FindBugs警告
如何在+ Spring Boot和+ Java应用程序中使用注释抑制FindBugs警告 如果您的构建由于FindBugs问题而中断,并且是假阳性,或者由于其他考虑而无法解决问题,则可以添加注释来忽略 ...
- openshift k8s_带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8
openshift k8s DIY盒带是一种实验性盒带,提供了一种在OpenShift上测试不受支持的语言的方法. 它提供了最小限度的自由形式的支架,将墨盒的所有细节留给了应用程序开发人员 . 这篇博 ...
- 在Amazon Elastic Beanstalk上部署Spring Boot应用程序
在此博客中,我们将看到如何在Amazon ElasticBeanstalk上部署Spring Boot应用程序. Amazon ElasticBeanstalk具有一个预配置的Java环境,可用于部署 ...
- 带有DIY的Openshift上的Spring Boot / Java 8 / Tomcat 8
DIY墨盒是一种实验性墨盒,它提供了一种在OpenShift上测试不受支持的语言的方法. 它提供了最小限度的自由形式的支架,将墨盒的所有细节留给了应用程序开发人员 . 这篇博客文章说明了结合了Post ...
- Spring Boot 2.x基础教程:多文件的上传
昨天,我们介绍了如何在Spring Boot中实现文件的上传(博客地址:https://blog.didispace.com/spring-boot-learning-21-4-3/).有读者问:那么 ...
最新文章
- 使用VMware新建Ubuntu虚拟机
- 用特征光谱分类神经网络
- 查看自己电脑可以支持的最大内存量
- 【手写数据结构】双链表最详细图解
- java jbutton 禁用_java – 如何禁用JButton在禁用时变灰?
- css hack技术整理
- 跟益达学Solr5之solrconfig.xml配置详解
- lombok var_使用var,Lombok和Fluxtion轻松处理事件
- linux下怎么查kill某个进程,Linux下查询进程PS或者杀死进程kill的小技巧
- ubuntu切换python默认版本从2.7到3.5后 报错 ImportError: No module named 'pip'
- Alexa排名 介绍
- 台币转换计算机,Soulver 内建自动计算机功能的备忘录工具 货币换算、複杂数学式也支援...
- 纯C语言编程实现数独解法
- 猿编程python怎么样_猿编程怎么练习编程 让你提前熟悉代码
- css 笔记——设置禁用中文输入法
- Android studio登陆注册的实现及介绍
- Python使用pngquant实现批量压缩图片
- coding期间遇到的bug记录
- Gateway集成Nacos和Sentinel
- 在微软Azure的服务器上创建Windows虚拟机的教程
热门文章
- [XSY] 绿色(圆方树、树形DP、树上差分)
- SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置
- JavaFX UI控件教程(二十)之HTML Editor
- 关于Unsafe类的一点研究
- 阿里巴巴对Java编程【单元测试】的规约
- jvm系列(九):如何优化Java GC
- 干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
- eclipse下载与安装步骤详解,包含解决错误(最全最详细,多图)
- 《走遍中国》珍藏版(五)
- sh(Spring+Spring mvc+hibernate)——IEmpDao.java