Mocking static Singleton class which talks to Dao and is called by a service class using static method

832 views
Skip to first unread message

Aditi

unread,
Aug 13, 2018, 5:22:07 AM8/13/18
to PowerMock
I have a singleton class with talks to the dao and is called by a service class using a static method.
Below is the Singleton class:
public class UserFilterService extends AbstractService<UserFilterDAO, UserFilter> {

protected static UserFilterService instance = new UserFilterService();

private UserFilterDAO UserFilterDAO;

private UserFilterService() {
userFilterDAO = new UserFilterDAOImpl();
}
Below is the Service class:
public class UserServiceFactory {

public static UserFilterService getUserFilterService() {
return UserFilterService.instance;
}
The dependencies i have in pom.xml:

<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-mockito-release-full</artifactId>
<version>1.6.4</version>
<classifier>full</classifier>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.6.4</version>
    <scope>test</scope>
</dependency> 

<dependency>
  <groupId>org.easymock</groupId>
  <artifactId>easymock</artifactId>
  <version>3.6</version>
  <scope>test</scope>
</dependency>
The current test class i have 
@Before
public  void before(){
    SuppressCode.suppressConstructor(UserFilterService.class);
   PowerMockito.mockStatic(UserFilterService.class);
    UserFilterService mockAlarmFilterService = EasyMock.createMock(UserFilterService.class);
    expect(UserFilterService.instance).andReturn(mockUserFilterService).anyTimes();
  
   
}
@Test
public void testgetuserFilterservice(){
UserServiceFactory mocUserFactory = Mockito.mock(UserServiceFactory.class);
when(mockEIBFactory.getuserFilterService()).thenReturn(mockUserFilterService);
}
This shows the following error:

java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z
at org.mockito.internal.creation.instance.InstantiatorProvider.getInstantiator(InstantiatorProvider.java:10)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:59)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70)
at com.avaya.eib.dam.mgmt.EIBDataServiceFactoryTest.before(EIBDataServiceFactoryTest.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:132)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:95)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:33)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:45)
at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106)
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53)
at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Tom Diffenbach

unread,
Aug 13, 2018, 2:27:41 PM8/13/18
to powe...@googlegroups.com

I think that PowerMock only supports EasyMock up to version 3.4, based on their wiki entry here, but you have 3.6: https://github.com/powermock/powermock/wiki/EasyMock

 

However, your problem seems to be with Mockito, not EasyMock. Verify that you don’t have a later version of Mockito on your classpath, either as an explicit dependency or as a transitive dependency. If you do, change the explicit dependency or exclude the transitive dependencies.

 

If you’re using PowerMock 1.6.4, you should be using Mockito 1.10.8 to 1.10.19. Note that PowerMock’s support for Mockito 2 is currently “experimental”. (See here for supported Mockito versions: https://github.com/powermock/powermock/wiki/Mockito)

--
You received this message because you are subscribed to the Google Groups "PowerMock" group.
To unsubscribe from this group and stop receiving emails from it, send an email to powermock+...@googlegroups.com.
To post to this group, send email to powe...@googlegroups.com.
Visit this group at https://groups.google.com/group/powermock [groups.google.com].
For more options, visit https://groups.google.com/d/optout [groups.google.com].

Aditi

unread,
Aug 16, 2018, 8:40:34 AM8/16/18
to PowerMock
I updated the easy mockito version to 3.4 but still i see the below error.

java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z
at org.mockito.internal.creation.instance.InstantiatorProvider.getInstantiator(InstantiatorProvider.java:10)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:59)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:70)
at com.avaya.eib.dam.mgmt.EIBDataServiceFactoryTest.before(EIBDataServiceFactoryTest.java:32)
is there a way around java.lang.NoSuchMethodError: org.mockito.mock.MockCreationSettings.isUsingConstructor()Z  ?

Thanks in advance.
Reply all
Reply to author
Forward
0 new messages