0

さて、私はこれを最も効率的な方法で行っていないことを確信しており、これをより効率的に行う方法に関するいくつかの助けを探しています...

  • config.txtファイルには、キーと値のペアが含まれています。ここで、key =テストの名前、value=テストを実行するかどうか
  • 構成ファイルを解析し、実行するテストのリストを作成します
  • それらのテストを実行します

これが私が現在これについて行っている方法です

  • 構成ファイルを介してヘルパー関数parseConfig、BufferedReaderに渡すことにより、ArrayListを作成します。parseConfigはTreeSetを返します。これは、ArrayListのコンストラクターメソッドで使用します。
  • parseConfigは、構成ファイル内のテキスト行を繰り返し処理します。値がテストを実行することを示している場合は、テストの名前をTreeSetに追加します。TreeSetを返します。
  • 拡張されたforループを使用してArrayListを反復処理します。拡張されたforループの本体は、基本的に長いif/elseステートメントです...ifkey.equals( "thisTest")の場合はthisTestを実行し、そうでない場合はkey.equals(thatTest)の場合はthatTest...などを実行します

私が本当に嫌いなのはその最後の部分です。それは十分に機能しますが、不器用で非効率的なようです。私のArrayListはTreeSetを使用して構築されているため、ソートされた順序になっています。キーをテストにマッピングして実行するために、より洗練された決定論的な方法を使用したいと思います。誰か助けてもらえますか?

4

2 に答える 2

1

このリストで行う必要があるのは、そのエントリをテストすることだけなので、私は別のことをします。

行ごとに正規表現を適用します。これは、2つのグループと前向きな先読みだけで非常に単純になることがわかります。このようにして、一致するすべての行のみを抽出し、から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 に答える