java - 使用 power mockito 模拟静态方法,在其构造函数中返回带有 dao 实例的单例类
问题描述
我有一个单例类,它在其私有构造函数中创建 dao 类的实例。这个单例类的实例由服务类的静态方法返回。我正在尝试使用 power mockito 模拟服务类。我得到了下面提到的错误。
下面是单例类:
public class UserFilterService extends AbstractService<UserFilterDAO,UserFilter {
protected static UserFilterService instance = new UserFilterService();
private UserFilterDAO UserFilterDAO;
private UserFilterService() {
userFilterDAO = new UserFilterDAOImpl();
}
}
下面是服务类:
public class UserServiceFactory {
public static UserFilterService getUserFilterService() {
return UserFilterService.instance;
}
}
我在 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>
我目前的测试班
@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() {
UserServiceFactorymocUserFactory=Mockito.mock(UserServiceFactory.class);
when(mockEIBFactory.getuserFilterService()).thenReturn(mockUserFilterService);
}
这显示以下错误:
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)
解决方案
推荐阅读
- c# - Azure Web App ASP Razor 预编译视图错误
- python - 无法创建虚拟环境
- dns - CNAME 正在重定向到我的主机页面
- python - Python:使用索引数组在两个数组之间进行映射
- c# - 如何将数据从 Form 传递到 Class 方法?
- python - 我的 Python 3 文件代码既没有附加也没有读取文件的权限
- angular - 使用 Angular Material 日期选择器自动格式化日期输入
- google-apps-script - 以编程方式查找您的脚本 ID
- amazon-web-services - 在另一个端口上运行 AWS SAM Local
- apache-spark - 使用 Window 函数将前一行与当前行相加