在Eclipse中,我可以轻松地在应用程序中运行所有JUnit测试。
我希望能够在没有Eclipse(或Ant或Maven或任何其他开发工具)的情况下从应用程序jar在目标系统上运行测试。
我可以从命令行查看如何运行特定的测试或套件。
我可以手动创建一个套件,列出我的应用程序中的所有测试,但这似乎容易出错-我确定有时会创建一个测试而忘记将其添加到套件中。
Eclipse JUnit插件具有创建测试套件的向导,但是由于某种原因,它没有“看到”我的测试类。它可能正在寻找JUnit 3测试,而不是JUnit 4带注释的测试。
我可以编写一个通过扫描源文件自动创建套件的工具。
或者,我可以编写代码,以便应用程序扫描它自己的jar文件以进行测试(通过命名约定或通过查找@Test批注)。
似乎应该有一个更简单的方法。我想念什么?
我的最后一个解决方案遇到了一个小问题。如果我从Eclipse运行“所有测试”,它们将运行两次,因为它们运行了单独的测试和套件。我本可以解决这个问题,但是后来我意识到有一个更简单的解决方案:
package suneido;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
public class RunAllTests {
public static void run(String jarfile) {
String[] tests = findTests(jarfile);
org.junit.runner.JUnitCore.main(tests);
}
private static String[] findTests(String jarfile) {
ArrayList<String> tests = new ArrayList<String>();
try {
JarFile jf = new JarFile(jarfile);
for (Enumeration<JarEntry> e = jf.entries(); e.hasMoreElements();) {
String name = e.nextElement().getName();
if (name.startsWith("suneido/") && name.endsWith("Test.class")
&& !name.contains("$"))
tests.add(name.replaceAll("/", ".")
.substring(0, name.length() - 6));
}
jf.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
return tests.toArray(new String[0]);
}
public static void main(String[] args) {
run("jsuneido.jar");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句