Hi Sina.

I have answered about a week ago on StackOverflow, maybe you have not noticed:
http://stackoverflow.com/a/30828293/1082681

Regards
-- 
Alexander Kriegisch
http://scrum-master.de


Sina schrieb am 01.06.2015 20:13:

Hi Andy,
> 
> 
> In fact my SampleImpl class is a stateless EJB which cannot be final and I’ve 
> used AspectJ previously with EJBs without any problem as they were not marked 
> as final classes. There is one point unclear for me: Even if the ordering of 
> compilation varies from one environment to another one the result should be 
> the same, meaning that nobody should mark the class as final or an extended 
> type of that class as final class in implementation of the proxies. I looked 
> at the decompiled code of my test class and it extends the SampleImpl class 
> and marks it as final when the aspectj is also in play but when it is 
> commented out in my pom.xml the class is not marked as final anymore.
> 
> Something goes wrong probably on Mockito’s side that it marks the extended 
> class as final. 
> 
> 
> I’ve also posted the same message in Mockito’s mailing list. I hope to get an 
> answer from there. 
> 
> Thank you for the response and declaration. 
> 
> Cheers,
> 
> Sina
> 
>  
> 
>> 
>> On Jun 1, 2015, at 4:33 PM, Andy Clement <[email protected] 
>> <mailto:[email protected]> > wrote:
>> 
>> 
>> My initial thought is that it is an ordering thing. AspectJ uses a pipeline 
>> system where types at different stages through the pipeline are represented 
>> in different ways (if they haven’t made it into the weaver yet they have an 
>> eclipse representation, once through the weaver they have a bcel 
>> representation). The ordering of compilation is not enforced other than 
>> aspects go first down the pipeline.  This means compiling in different 
>> environments (on different JDK levels, doing a build inside eclipse, outside 
>> eclipse, etc) can lead to all the other types flowing down the pipeline in 
>> the different orders.
>> 
>> 
>> This sounds bad:
>> 
>> 
>>>> 
>>>> 
>>>> Caused by: java.lang.VerifyError: Cannot inherit from final class
>>>> 
>>>> 
>>>> 
>> But if AspectJ were making that mistake I’d perhaps expect to see the issue 
>> without mockito in the mix.
>> 
>> 
>> cheers,
>> 
>> Andy
>> 
>> 
>>> On May 31, 2015, at 8:42 AM, Sina <[email protected] 
>>> <mailto:[email protected]> > wrote:
>>> 
>>> 
>>> I haven't found a solution yet but I know why is this happening. The 
>>> problem actually lies here on overriding the someMethod(). Removing the 
>>> method override or commenting out the aspectj maven plugin solves the 
>>> problem as a workaround. I cannot let AspectJ out of my project so I have 
>>> to mock the someMethod() as well without overriding it (e.g. using Mockito 
>>> itself). It looks like a bug for me but I’m not quite sure does it come 
>>> from AspectJ or Mockito.
>>> 
>>> 
>>>> On May 30, 2015, at 10:45 PM, Sina <[email protected] 
>>>> <mailto:[email protected]> > wrote:
>>>> 
>>>> 
>>>> Hi there I have using the AspectJ along with Mockito’s spy I have the  
>>>> following problem that I have posted on stackoverflow: 
>>>> 
>>>> 
>>>> http://stackoverflow.com/questions/30551184/mockitos-spy-does-not-work-along-with-aspectj-using-maven
>>>>  
>>>> <http://stackoverflow.com/questions/30551184/mockitos-spy-does-not-work-along-with-aspectj-using-maven>
>>>>  
>>>> 
>>>> 
>>>> I have the following test class and I'm using Mockito's spy. By running my 
>>>> unit test using Eclipse (right click->Run as unit test) all tests pass 
>>>> which means that eclipse build process using m2e and AJDT works fine. 
>>>>     @RunWith(MockitoJUnitRunner.class)
>>>>     public class SamplelTest {
>>>> 
>>>> 
>>>>     @Spy
>>>>     @InjectMocks
>>>>     private SamplelImpl sampleService = new SamplelImpl() {
>>>> 
>>>>         @Override
>>>>         public void someMethod() {
>>>>            ...
>>>>         }
>>>>     };
>>>> 
>>>> 
>>>>     @Test
>>>>     public void someTest() throws Exception {
>>>>         sampleService.methodUnderTest();
>>>>     }
>>>> 
>>>> 
>>>> 
>>>> However when I use maven to run the tests I get the following exception. 
>>>>     Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed:
>>>> 0.183 sec <<<     FAILURE!
>>>>     org.sample.SamplelTest  Time elapsed: 0.182 sec  <<<
>>>> ERROR!
>>>>     org.mockito.exceptions.base.MockitoException: Problems
>>>> initiating spied field     sampleService
>>>>     at    
>>>> org.mockito.internal.runners.JUnit45AndHigherRunnerImpl$1.withBefores(JUnit45AndHigherRunnerImpl.java:27)
>>>>     at
>>>> org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:254)
>>>>     at
>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
>>>>     at
>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
>>>>     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
>>>>     at
>>>> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
>>>>     at
>>>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
>>>>     at
>>>> org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
>>>>     at
>>>> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
>>>>     at
>>>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>>>>     at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
>>>>     at
>>>> org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
>>>>     at
>>>> org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
>>>>     at
>>>> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
>>>>     at
>>>> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
>>>>     at
>>>> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>     at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>>     at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>     at java.lang.reflect.Method.invoke(Method.java:606)
>>>>     at
>>>> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
>>>>     at
>>>> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
>>>>     at
>>>> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
>>>>     at
>>>> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
>>>>     at
>>>> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
>>>> Caused by: org.mockito.exceptions.base.MockitoException: 
>>>> Mockito cannot mock this class: class org.sample.SamplelTest$1
>>>> Mockito can only mock visible & non-final classes.
>>>> If you're not sure why you're getting this error, please report to
>>>> the mailing list.
>>>>     ... 25 more
>>>> Caused by: org.mockito.cglib.core.CodeGenerationException:
>>>> java.lang.reflect.InvocationTargetException-->null
>>>>     at
>>>> org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:238)
>>>>     at
>>>> org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
>>>>     at
>>>> org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
>>>>     at
>>>> org.mockito.internal.creation.cglib.ClassImposterizer.createProxyClass(ClassImposterizer.java:123)
>>>>     at
>>>> org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:57)
>>>>     at
>>>> org.mockito.internal.creation.cglib.ClassImposterizer.imposterise(ClassImposterizer.java:49)
>>>>     at
>>>> org.mockito.internal.creation.cglib.CglibMockMaker.createMock(CglibMockMaker.java:24)
>>>>     at
>>>> org.mockito.internal.util.MockUtil.createMock(MockUtil.java:33)
>>>>     at org.mockito.internal.MockitoCore.mock(MockitoCore.java:59)
>>>>     at org.mockito.Mockito.mock(Mockito.java:1285)
>>>>     at
>>>> org.mockito.internal.configuration.injection.SpyOnInjectedFieldsHandler.processInjection(SpyOnInjectedFieldsHandler.java:43)
>>>>     at
>>>> org.mockito.internal.configuration.injection.MockInjectionStrategy.process(MockInjectionStrategy.java:68)
>>>>     at
>>>> org.mockito.internal.configuration.injection.MockInjectionStrategy.relayProcessToNextStrategy(MockInjectionStrategy.java:89)
>>>>     at
>>>> org.mockito.internal.configuration.injection.MockInjectionStrategy.process(MockInjectionStrategy.java:71)
>>>>     at
>>>> org.mockito.internal.configuration.injection.MockInjection$OngoingMockInjection.apply(MockInjection.java:93)
>>>>     at
>>>> org.mockito.internal.configuration.DefaultInjectionEngine.injectMocksOnFields(DefaultInjectionEngine.java:20)
>>>>     at
>>>> org.mockito.internal.configuration.InjectingAnnotationEngine.injectMocks(InjectingAnnotationEngine.java:100)
>>>>     at
>>>> org.mockito.internal.configuration.InjectingAnnotationEngine.processInjectMocks(InjectingAnnotationEngine.java:62)
>>>>     at
>>>> org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:56)
>>>>     at
>>>> org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:108)
>>>>     ... 25 more
>>>> Caused by: java.lang.reflect.InvocationTargetException
>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>     at
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>>     at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>     at java.lang.reflect.Method.invoke(Method.java:606)
>>>>     at
>>>> org.mockito.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:385)
>>>>     at
>>>> org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:220)
>>>>     ... 44 more
>>>> Caused by: java.lang.VerifyError: Cannot inherit from final class
>>>>     at java.lang.ClassLoader.defineClass1(Native Method)
>>>>     at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
>>>>     ... 50 more
>>>> 
>>>> 
>>>> 
>>>> What is here the difference between the AJC compiler used in Eclipse with 
>>>> AJDT and my AspectJ maven plugin configuration? Which configuration or 
>>>> phase am I missing here?
>>>> 
>>>> Here is my pom.xml:
>>>> <dependency>
>>>>         <groupId>org.aspectj</groupId>
>>>>         <artifactId>aspectjrt</artifactId>
>>>>         <version>1.6.11</version>
>>>> </dependency>
>>>> <build>
>>>>     <plugins>
>>>>         <plugin>
>>>>             <groupId>org.codehaus.mojo</groupId>
>>>>            
>>>> <artifactId>aspectj-maven-plugin</artifactId>
>>>>             <version>1.4</version>
>>>>             <configuration>
>>>>                 <source>1.6</source>
>>>>                 <target>1.6</target>
>>>>             </configuration>
>>>>             <executions>
>>>>                 <execution>
>>>>                     <phase>process-sources</phase>
>>>>                     <goals>
>>>>                         <goal>compile</goal>
>>>>                         <goal>test-compile</goal>
>>>>                     </goals>
>>>>                 </execution>
>>>>             </executions>
>>>>         </plugin>
>>>>     </plugins>
>>>> </build>
>>>> 
>>>> 
>>>> 
>>>> Any idea?
>>>> 
>>>> _______________________________________________
>>>> aspectj-users mailing list
>>>> [email protected] <mailto:[email protected]> 
>>>> To change your delivery options, retrieve your password, or unsubscribe 
>>>> from this list, visit
>>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users 
>>>> <https://dev.eclipse.org/mailman/listinfo/aspectj-users> 
>>> 
>>> 
>>> _______________________________________________
>>> aspectj-users mailing list
>>> [email protected] <mailto:[email protected]> 
>>> To change your delivery options, retrieve your password, or unsubscribe 
>>> from this list, visit
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users 
>>> <https://dev.eclipse.org/mailman/listinfo/aspectj-users> 
>> 
>> 
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected] <mailto:[email protected]> 
>> To change your delivery options, retrieve your password, or unsubscribe from 
>> this list, visit
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> 
>
_______________________________________________
aspectj-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to