Java 我们应该把二进制测试数据保存在哪里?

Java 我们应该把二进制测试数据保存在哪里?,java,junit,continuous-integration,Java,Junit,Continuous Integration,我们有大量的单元测试,需要二进制数据作为输入和输出。输入很少改变,但输出有时会改变,我们必须手动检查输出,然后提交新的“正确”版本 目前,我们将它们存储在一个中央文件系统中,但每次分支并更改输出时,我们的单元测试都会中断,因为branch1的输出可能比branch2的旧。我们想对这些二进制文件进行版本控制。我们应该为此使用诸如Sonatype Nexus或JFrog Artifactory之类的工件库吗?另外,考虑到我对Maven的憎恨,我最终会哭吗?如果这些文件足够小,那么你可以将它们与测试一

我们有大量的单元测试,需要二进制数据作为输入和输出。输入很少改变,但输出有时会改变,我们必须手动检查输出,然后提交新的“正确”版本


目前,我们将它们存储在一个中央文件系统中,但每次分支并更改输出时,我们的单元测试都会中断,因为branch1的输出可能比branch2的旧。我们想对这些二进制文件进行版本控制。我们应该为此使用诸如Sonatype Nexus或JFrog Artifactory之类的工件库吗?另外,考虑到我对Maven的憎恨,我最终会哭吗?

如果这些文件足够小,那么你可以将它们与测试一起存储在VCS中


如果这不是一个选项,那么您可以手动对其进行版本设置,但不需要任何版本控制系统。只需将文件设置为“不可变”。只需将它们命名为xxx_v1.0.4(或xxx_2015-08-12),并在更改时复制、重命名文件,让您的新测试引用新文件。您只需删除任何分支机构未使用的文件

仅为这些文件管理nexus可能过于复杂,特别是如果您对maven不感兴趣的话

对你来说,单身可能是更好的解决方案。您可以使用svn url指向确切的地址

Svn可以很好地处理大文件。提交/添加资源的svn命令行将比将资源部署到nexus的命令行更直接


假设您的情况是:大文件,需要中央服务器,需要版本控制,还没有使用maven。

1)您已经使用maven来构建项目了吗?如果是,您可以在maven中设置这些,但需要一些配置(3-4个xml条目)2)如果不是,是否使用http下载工件,然后提取所需内容?不,我们不使用maven。下载可能是必需的-这是一个问题真的,提取将不需要。我真的在寻找一个最佳实践答案这个问题。嗯。。。版本化资源进入VCS。不一定是与代码相同的VCS。因此,选择一个能够很好地处理大文件的文件。我们最终用Git中的代码保留了对该文件的引用,然后将文件存储在Hadoop中。这些文件对于VCS来说太大了,我真的不喜欢手动版本控制的想法-它对我有用,甚至可能现在对我们所有人都有用,但两年后我们肯定会后悔的。@mjaggard但手动版本控制是你现在正在做的事情。手动创建新的输出版本并保存。这就导致了CI的问题。我的建议是:做同样的事情,只是用不同的名字保存。在没有CI的情况下,您将有相同的工作量problems@mjaggard不确定这是否可能,不管你将使用什么工具。人类必须决定何时需要新版本,创建并保存该版本,并决定什么测试应该使用什么版本。可以自动化的是清理未使用的资源——您可以编写一个脚本,删除任何“活动”分支未使用的文件,就像这样,这是我已经开始走的路线。只是我花了一点编码时间来让事情正常工作(特别是我想支持离线运行的用户,所以我定义了一个缓存目录,其中包含测试运行所需的所有修订版的所有文档)很酷。我希望您可以在客户端计算机中访问svn客户端。通过使用svn命令行签出修订(或标记)进行缓存会更简单。这些文件到底有多大?我必须检查每个文件的正确版本,所以这不是一件小事-我还想为开发人员创建一种简单的方法,让他们根据测试运行提交新文件(在检查测试结果时提交测试结果)。没有什么比1GB更大。让您知道,最后,我们使用了SVN几个月,然后切换到使用Hadoop,并引用文件名,其中包括代码旁边的版本,效果非常好。