0

我目前正在尝试动态生成代码,对其进行编译,然后将其作为 JUnit4 测试运行。我非常接近目标,但我有一个问题可能与 plexus-compiler-eclipse 或我如何加载编译的类有关。让我解释:

  1. 我使用简单的 FileWriterWithEncoding 将 java 代码写入文件
  2. 我使用 EclipseJavaCompiler().performCompile(CompilerConfiguration) 使用 plexus-compiler-eclipse (也尝试使用 plexus-compiler-javac)将它编译为 Java6 代码(source-target-compliance)
  3. URLClassLoader.newInstance(new URL[] {resource }).loadClass("classname")我使用where resource is加载类getClass().getResource("filename")(也尝试使用getClass().forName(className, true, classLoader)classLoader 与上面相同的 URLClassLoader )
  4. 然后我使用 JUnitCore 的一个实例来运行我使用 JUnitCore().run 生成的测试类(加载上面的类的结果)

在第 4 点之前,一切似乎都很好,JUnit 在该类上看不到任何测试方法(我显然确实在生成的代码中使用 @org.junit.Test 注释了每个测试方法)。调试,我可以看到如果我对加载的类执行 newInstance() 或检查加载的类,我没有注释,没有公共方法,没有声明的字段,SFA !!!newInstance() 只有一个私有成员,这是正常的,因为它的引用类型是 Object,但不知何故,我无法将它强制转换为尝试调用应该存在的公共方法。

知道我在编译/类加载中缺少什么导致运行时类不完整吗?

在此先感谢您的任何想法...

4

1 回答 1

0

显然,这很简单!我发现这个答案让我意识到我的 URLClassLoader 缺少父母。

于 2012-11-21T07:51:47.107 回答