我正在尝试编写一个动态运行外部类测试的方法。我能够运行仅使用 JDK 库的测试,但是当我运行使用另一个库(例如 org.jmock.Mockery)的测试时,JUnitCore.run(args) 返回的 Result 对象有以下错误:
[initializationError(package.TestClass): org/jmock/Mockery]
java.lang.NoClassDefFoundError: org/jmock/Mockery
com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.
不用说,如果我从 Eclipse 中的原始项目运行它们,测试就会运行并通过。
我相信这个问题与类路径有关,因为 ClassLoader 似乎只加载正在测试的类,而不加载外部项目的类路径中定义的依赖项(如 jars)。我不知道如何将 jar 动态加载到正在执行的应用程序中。
下面是加载类和运行测试的代码。
URL url = new File("E:\eclipseProjectName\bin\").toURL();
final URL[] urls = new URL[] { url };
final ClassLoader cl = new URLClassLoader(urls);
@SuppressWarnings("rawtypes")
final Class cls = cl.loadClass("package.ClassName");
final JUnitCore core = new JUnitCore();
final Result result = new JUnitCore().run(Request.method(cls, "methodName"));
提前致谢,
马克卡奇亚