-> IllegalAccessError using JUnit PDE Test [message #86363] |
Tue, 19 August 2003 05:09  |
Eclipse User |
|
|
|
Hi there,
I have split a project containing JUnit tests. I wanted to seperate
the ui and related tests. Now I ran into this error message.
java.lang.IllegalAccessError: tried to access method
BeanItem.propertyChanged
(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V from class
BeanItem
Normally I ran all tests which doesn't require a ui using the normal JUnit
launcher.
But using the PDE JUnit launcher (launch the test within a seperated Eclipse
workspace) causes an IllegalAccessError.
The fun is, it finds the classes but calling a method fails for sure.
For example the above things work:
new BeanItem(0,0);
new BeanItemImpl extends BeanItem {
}
BeanItemImpl bean=new BeanItemImpl(0,0);
bean.propertyChanged(...);
but if i use
BeanItem bean=new BeanItem(0,0);
bean.propertyChanged(...);
it fails cause of IllegalAccessError...
Does someone has a clue? (plugin dependencies are correct because
the class is found and it can be instanciated.
Thanks
Martin(Kersten)
|
|
|
|
|
|
Re: -> IllegalAccessError using JUnit PDE Test [message #86911 is a reply to message #86882] |
Wed, 20 August 2003 02:59  |
Eclipse User |
|
|
|
Looks like I forgot to mention the third way ;)
Seperate source directory into two. This way works excellent on a
creamy base ;).
Here is what I have done:
create a second directory called src-test. So every thing gets seperated
in the package/type view (viewing either the production code or the test
code)
and I have the full access of default and protected methods of classes
within the same package.
Drawback:
The plugin.xml gets additional sections about test views. I think I will
just
add a second section or even better include a plugin-test.xml file as part.
So to get a shippable version you have to remove the bin-test.jar and
a line/section in the plugin.xml.
Well if this isn't foxy, I don't know what else is... .
Martin (Kersten)
> > These errors generally mean you are trying to access a method that you
do
> > not have access to. In other words, are you calling a private or
protected
> > method/class/variable? If so, change the security level to public... Or
> > create appropriate public API.
>
> I checked that. The problem is, its working if you use the normal JUnit
> launcher. But testing it using a seperate Workbench (JUnit PDE) fails.
>
> Indeed it is the access level but not the way you might think. Here is
> what goes wrong.
>
> The plugins are running within their own area. Everything outside that
> area is threaten as foreign. Therefore if you seperate a package into
> fragments which are spread over diffrent plugins you are running into
> the problem I am facing.
>
> Take this as an example:
>
> //plugin containing production code
> package myPackage;
>
> public class A {
> private privateMethod() {}
> protected protectedMethod() {}
> defaultMethod() {}
> public publicMethod() {}
> }
>
> //plugin containing test code
> package myPackage;
> public class TestA extends TestCase {
> public void testPrivateMethod() {
> new A().privateMethod(); //fails because private is not
visible
> }
> public void testProtectedMethod() {
> new A().protectedMethod(); //visible
> }
> public void testDefaultMethod() {
> new A().defaultMethod(); //visible
> }
> public void testPublicMethod() {
> new A().publicMethod(); //visible
> }
> }
>
> The visiblilty changes if both plugins are
> loaded as plugins. In this case default and protected
> are not visibil. But running both fragments shared
> between Projects and are included using a class path
> it is visible.
>
> There are two ways to get around it.
> 1. Create your own implementation:
> BeanItem item
> BeanItemImpl item2 (BeanItemImpl simply extends BeanItem)
> -> item.protected/defaultMethod fails
> -> item2.protected/defaultMethod works
> 2. Seperate the test and production code by using two
> seperate source directories but both directories contained
> within the same plugin. (Maybe plugin fragment or within the
> same project) -> Next think I am testing ;)
>
>
> Well I guess this is the reason for PluginFraments ;)
>
>
> Bye
>
> Martin (Kersten)
>
> >
> >
> >
> > Martin Kersten wrote:
> >
> > > Hi there,
> >
> > > I have split a project containing JUnit tests. I wanted to seperate
> > > the ui and related tests. Now I ran into this error message.
> >
> > > java.lang.IllegalAccessError: tried to access method
> > > BeanItem.propertyChanged
> > > (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V from class
> > > BeanItem
> >
> > > Normally I ran all tests which doesn't require a ui using the normal
> JUnit
> > > launcher.
> > > But using the PDE JUnit launcher (launch the test within a seperated
> Eclipse
> > > workspace) causes an IllegalAccessError.
> >
> > > The fun is, it finds the classes but calling a method fails for sure.
> >
> > > For example the above things work:
> > > new BeanItem(0,0);
> >
> > > new BeanItemImpl extends BeanItem {
> > > }
> >
> > > BeanItemImpl bean=new BeanItemImpl(0,0);
> > > bean.propertyChanged(...);
> >
> > > but if i use
> >
> > > BeanItem bean=new BeanItem(0,0);
> > > bean.propertyChanged(...);
> >
> > > it fails cause of IllegalAccessError...
> >
> >
> > > Does someone has a clue? (plugin dependencies are correct because
> > > the class is found and it can be instanciated.
> >
> >
> > > Thanks
> >
> > > Martin(Kersten)
> >
> >
>
>
|
|
|
Powered by
FUDForum. Page generated in 0.04393 seconds