0

好的,我确定我不会以最有效的方式解决这个问题,我正在寻求一些关于如何更有效地做到这一点的帮助......

  • config.txt 文件包含键/值对,其中 key = 测试名称和 value = 是否执行测试
  • 解析配置文件并创建要运行的测试列表
  • 运行这些测试

这是我目前的处理方式

  • 通过在我的配置文件上传递给辅助函数 parseConfig、BufferedReader 来创建 ArrayList。parseConfig 返回一个 TreeSet ,我在 ArrayList 的构造方法中使用它
  • parseConfig 迭代配置文件中的文本行。如果 value 指示执行测试,则将测试名称添加到 TreeSet。返回树集。
  • 使用增强的 for 循环遍历 ArrayList。增强的for循环体基本上是一个长的if/else语句...如果key.equals(“thisTest”),执行thisTest,否则如果key.equals(thatTest),执行thatTest...等

这是我真的不喜欢的最后一部分。它工作得很好,但似乎笨拙且效率低下。由于我的 ArrayList 是使用 TreeSet 构造的,因此它是按排序顺序排列的。我想使用一种更优雅和确定性的方法将我的键映射到要执行的测试。谁能帮我?

4

2 回答 2

1

我会做其他事情,因为你需要对这个列表做的就是测试它的条目。

我会一行一行地对其应用正则表达式,据我所知,这将非常简单,只有两个组和一个积极的前瞻,这样我就可以只提取所有匹配的行并创建一个 ArrayList那些,然后迭代 ArrayList 并测试每个方法。如果您可以就文件的外观提供一些输入,我可以帮助您输入代码。

更新

例如,这是我提出的代码(可以在 5 分钟内改进)进行解析:

 /**
 * 
 * @param inputFile location of inputFile
 * @return {@link ImmutableSet} of tests to run
 */
public static ImmutableSet<String> parseConfigFile(File inputFile){
    HashSet<String> innerSet = Sets.newHashSet();
    BufferedReader bufferedReader = null;
    try {
        bufferedReader = new BufferedReader(new FileReader(inputFile));
        String newLine = "";
        while( (newLine = bufferedReader.readLine()) != null){
            Pattern p = Pattern.compile("(.+)=(?=yes|1|true)(.+)");
            Matcher m = p.matcher(newLine);

            while(m.find()){
                //System.out.println(m.group(1));
                innerSet.add(m.group(1));
            }
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if(bufferedReader != null)
            try {
                bufferedReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    }

    return ImmutableSet.copyOf(innerSet);
}

我测试了一个看起来像这样的文件,例如:

  SomeTest=true
  SomeOtherTest=false
  YetAnotherTest=1
  LastTest=yes
  GogoTest=no
  OneMore=0
于 2012-08-14T18:15:31.870 回答
0

答案是创建一个HashMap <String, Method>对象。

于 2012-08-14T22:10:58.750 回答