当 运行 作为插件测试时,不同项目中的重复包名称会导致 InvalidAccessException

Duplicate package name in different project causes InvalidAccessException when run as plugin test

您好,我目前正在构建一个 eclipse 插件项目,我需要编写测试来测试一些私有包 类 但是,这些测试需要放置在另一个插件项目中,该项目在其内部具有实际的应用程序插件依赖项。

为了访问包私有 类 我将测试包命名为与实际包相同的名称。问题是,如果我 运行 它作为 JUnit 插件测试,我会得到一个 InvalidAccessException

java.lang.IllegalAccessError: tried to access class framework.resourcepack.datamodel.IResourceModel from class framework.resourcepack.datamodel.testCreateModel
at framework.resourcepack.datamodel.testCreateModel.testCreateLanguageModel(testCreateModel.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
at ...

如果我 运行 作为标准 junit,这 运行 没问题。我已经检查了所有依赖项,它们都很好。任何帮助将不胜感激 ;)

解决此问题的最常见方法是将您的测试包设为 Fragment 而不是 Plugin,并将其主机插件设置为包含您正在测试的 类 的插件。

这意味着该片段使用主机插件的类加载器,因此应该可以访问那些 类。