测试类与被测试类在不同的Plug-in, 但有相同的包名
org.myym.myplugin
package org.myym.myplugin;
public class MyClass {
int myMethod() {
return 1;
}
}
org.myym.myplugin.test
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();
@Test
public 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成单独的类来测试。