自动运行具有大量不同参数组合的 jar 并存储输出

Running jar with lots of different combinations of arguements automatically and storing output

我有一个 Java 程序,我想用很多不同的参数组合来测试它并存储输出(System.out.print()'s)以查看它在不同条件下的表现情况。我正在寻找一种自动执行此操作的方法。参数都是预定义的字符串,我可以将它们放入数组中。

我想做的基本上是这样的:

for (argument a in argumentArray1) 
    for (argument b in argumentArray2) 
        // more nested loops
            runAndStoreOutput("java -jar PATH_TO_MY_FILE " + a + " " + b /* + ... */);

我可以在 Java 中执行此操作吗?我是不是该?是否有任何应用程序可以让我轻松地做到这一点?

如果您想定期确保您的应用程序正常运行,例如在 Java 中执行此操作是有意义的每次更改或每次发布后。在这种情况下,您应该编写一个单元测试。如果你想这样做,你应该只用单元测试测试你的应用程序 Main 方法,而不是再次测试编译的 jar 文件。

为了创建所有可能的参数组合,您可以像这样使用 google 的番石榴:

Set<String> a = Sets.newHashSet("A", "B");
Set<String> b = Sets.newHashSet("1", "2");
Set<String> c = Sets.newHashSet("#", "+");
Set<List<String>> powerSet = Sets.cartesianProduct(a, b, c); // variable-length argument list
for (List<String> subSet : powerSet)
    System.out.println(subSet);

输出:

[A, 2, +]
[A, 2, #]
[A, 1, +]
[A, 1, #]
[B, 2, +]
[B, 2, #]
[B, 1, +]
[B, 1, #]

如果您需要幂集而不是笛卡尔积,也可以像这样:

Set<String> a = Sets.newHashSet("A", "B", "C");
Set<Set<String>> powerSet = Sets.powerSet(a);
for (Set<String> subSet : powerSet)
    System.out.println(subSet);

输出:

[]
[A]
[B]
[A, B]
[C]
[A, C]
[B, C]
[A, B, C]