Run as JUnit Plug-in test 出错:java.lang.IllegalAccessError
测试类与被测试类在不同的Plug-in, 但有相同的包名
?
org.myym.myplugin
package org.myym.myplugin;import static org.junit.Assert.*;import org.junit.Test;import org.myym.myplugin.MyClass;public class MyClassTest {MyClass myClass = new MyClass();@Testpublic void myMethodReturnOne(){assertEquals(1, myClass.myMethod());}}
?
当Run as JUnit test时没有错误, 但当Run as JUnit Plug-in test时报错:java.lang.IllegalAccessError
?
这是因为Eclipse的插件机制,MyClass和MyClassTest被装载在各自不同的ClassLoader中,从而不能调用包可见的方法。
?
可以将org.myym.myplugin.test创建成org.myym.myplugin的fragment使得装载在同一个ClassLoader中. see http://www.modumind.com/2007/06/20/unit-testing-plug-ins-with-fragments/
?
比较简单而彻底的方法是不要利用package visible来测试方法。如果该方法比较复杂必须单独测试,可以将它Extract成单独的类来测试。