3

现在的情况

作为预构建测试,我正在尝试检查对 java 固定装置的任何提交/更改是否不会破坏我在我的健身服务器中进行的任何健身测试。

我采取的方法是获取我想要验证提交不会中断的所有测试(context.txt)文件,并尽我所能对其进行解析,并将其与我可以使用我的项目中的反射获取的可用方法进行比较.

目前,对于所有可用的 java 固定装置,我都有一个从“类名”到“类对象”的 HashMap。我还能够以 File 对象的形式访问所有健身测试。它看起来有点像这样:

HashMap<String, Class<?>> availableJavaClassesMap = initJavaMap();
List<File> allFitnesseTestFiles = initTestFiles();

目标

现在我希望能够做这样的事情:

HashMap<String, Method> parsedMethodsFromFitnesseMap;
For(File file: allFitnesseTestFiles) {
    parsedMethodsFromFitnesseMap.addAll( parseFile( file ) );
}

然后我将简单地比较这两个 HashMap 并确保 parsedMethodsFromFitnesseMap HashMap 是 availableJavaClassesMap HashMap 的子集。

担心

  • 包含文件:如何处理解析那些第一种/其他方法
  • 场景:创建我自己的已知场景列表及其工作方式

理想的解决方案

  1. 是否有一个已经制作好的解析器可以做到这一点?
    • 我找到了Slim Code,并认为它可以根据我的需要进行重构。
  2. 这是此预构建检查的最佳方法吗?

笔记

每个测试的运行都非常昂贵,因此简单地运行所有测试以查看它们是否仍然有效并不是我需要的选项。

想法?谢谢。

4

1 回答 1

0

我的解决方案

我确定的方法是使用 SVNKit 以编程方式从 svn 拉入系统临时文件夹,然后在方法之间进行解析和比较,然后在完成后删除目录。

对于执行时间,如果我提取并解析 200 个测试,大约需要 20 秒。然而,大约 90% 的时间都被简单地从 svn repo 中提取测试所占用。

坚持回购而不是删除它可以解决这个时间问题(显然除了第一次拉),但是对于我的 jUnit 风格方法,为了封装,我可能会花费更长的时间。

我确保预先解析了导入文件,以便在解析实际测试时可以使用其中的场景。

我最终没有使用任何纤细的代码(但是,如果您想试一试,我认为 InstructionExecutor 类是最有用/最接近解析器的。

这是一个相当简单的方法,我会推荐它。

笔记

我从来没有尝试过 restful 方法,它可能会产生更快的执行时间,但是一旦 repo 成功地拉到机器上,我确实很享受这种简单性。

于 2014-10-24T18:47:55.087 回答