Eclipseで実行する一連の単体テストがあり、すべて正常に機能します。これらは、20MBを超える非常に大きなファイルからロードされたデータに依存します。ただし、ANTから単体テストを実行すると、一部のデータがロードされていないため、テストが失敗します。何が起こるかというと、私のファイル読み取りメカニズムはファイル全体を読み取らず、900,000行のうち約10,000行を読み取った後、エラーを発生させることなく停止するだけです。
これが私のファイル読み取りコードです
private static void initializeListWithFileContents(
TreeMap<String, List<String>> treeMap, String fileName)
{
File file = new File(fileName);
Scanner scanner = null;
int count = 0;
try
{
scanner = new Scanner(file);
while (scanner.hasNextLine())
{
String line = scanner.nextLine().toLowerCase().trim();
String[] tokens = line.split(" ");
if (tokens.length == 3)
{
String key = tokens[0] + tokens[1];
if (treeMap.containsKey(key))
{
List<String> list = treeMap.get(key);
list.add(tokens[2]);
}
else
{
List<String> list = new ArrayList<String>();
list.add(tokens[2]);
treeMap.put(key, list);
}
count++;
}
}
scanner.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
System.out.println(count + " rows added");
}
これはWebアプリの一部です。Webアプリも正常に動作し、ファイル全体がメモリに読み込まれます。ユニットテストが依存するデータが最初の10,000行に含まれている場合、ユニットテストはANTで正常に合格します。私が考えることができる唯一のことは、それはメモリの問題であるに違いないということですが、なぜ私は例外がスローされないのですか?Eclipse内からANTターゲットを実行します。これは、Eclipse JUnitランナーと同じJVM引数、つまり-Xms512m-Xmx1234mで構成されています。ANTがデフォルトのJVMパラメータで起動すると、ヒープエラーで失敗するため、これらが正しく検出されることはわかっています。私がチェックできる他のアイデアはありますか?