运行 JUnit 测试以编程方式加载不同的 .class 文件
Run JUnit test programmatically loading different .class files
我目前能够 运行 以编程方式执行 JUnit 测试,如下所示:
JUnitCore junit = new JUnitCore();
Result result = new Result();
File root = new File("rootWhereSommatoreTest.classIS");
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{root.toURI().toURL() });
Class<?> cls = classLoader.loadClass("SommatoreTest");
result = junit.run(cls);
return result;
我不喜欢此代码的地方是 SommatoreTest.class 必须与 Sommatore.class 位于同一目录中才能工作。所以我想知道是否有可能 运行 Junit 测试,从同一个 ClassLoader 中的不同目录分别加载 .class 文件,使 SommatoreTest 能够 "see" Sommatore。
提前感谢您的回答!继续努力!
您只需要确保提供给您的 URLClassLoader
的 URL
与您的测试 class 的 根文件夹 匹配或使用包含您的测试 class 的 jar 文件。
在你的情况下,你似乎使用了一个目录,所以假设你的 class 的 FQN 是 my.package.MyTest
并且文件 MyTest.class
在目录 /my/class/dir/my/package
中,那么您需要确保 URL
与测试的根文件夹 class 匹配,在本例中为 /my/class/dir/
.
我目前能够 运行 以编程方式执行 JUnit 测试,如下所示:
JUnitCore junit = new JUnitCore();
Result result = new Result();
File root = new File("rootWhereSommatoreTest.classIS");
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{root.toURI().toURL() });
Class<?> cls = classLoader.loadClass("SommatoreTest");
result = junit.run(cls);
return result;
我不喜欢此代码的地方是 SommatoreTest.class 必须与 Sommatore.class 位于同一目录中才能工作。所以我想知道是否有可能 运行 Junit 测试,从同一个 ClassLoader 中的不同目录分别加载 .class 文件,使 SommatoreTest 能够 "see" Sommatore。
提前感谢您的回答!继续努力!
您只需要确保提供给您的 URLClassLoader
的 URL
与您的测试 class 的 根文件夹 匹配或使用包含您的测试 class 的 jar 文件。
在你的情况下,你似乎使用了一个目录,所以假设你的 class 的 FQN 是 my.package.MyTest
并且文件 MyTest.class
在目录 /my/class/dir/my/package
中,那么您需要确保 URL
与测试的根文件夹 class 匹配,在本例中为 /my/class/dir/
.