我有一个从缓存实例中获取数据的函数,我需要对其进行模拟
public List<Map<String, Object>> getDuplicateCheckNotificationJSON(String identityAction) {
IdentityActions identityActions = IdentityActionsCache.getInstance().getIdentityActionsByName(identityAction);
List<RequestCategoryView> requestCategoryViews= identityActions.getReqCategory().getReqCategoryViews();
for (RequestCategoryView requestCategoryView : requestCategoryViews) {
...
}
return null;
}
IdentityActionsCache类
public static IdentityActionsCache getInstance() {
if(null == singleton) {
singleton = new IdentityActionsCache();
singleton.init();
}
return singleton;
}
public IdentityActions getIdentityActionsByName(String actionName){
xyz
return result;
}
JUnit与powermock
@RunWith(PowerMockRunner.class)
@PrepareForTest({IdentityService.class, IdentityActionsCache.class})
public class IdentityServiceTest {
@InjectMocks
IdentityService identityService;
@Test
public void getDuplicateCheckNotificationJSONTest() {
List<Map<String, Object>> result;
try {
PowerMockito.mockStatic(ServiceLocator.class);
PowerMockito.mockStatic(IdentityActionsCache.class);
when(ServiceLocator.findService("workflowConfigDataService")).thenReturn(workflowConfigDataService);
IdentityActions identityActions = new IdentityActions();
when(IdentityActionsCache.getInstance().getIdentityActionsByName(action)).thenReturn(identityActions);
result = identityService.getDuplicateCheckNotificationJSON(action);
assertTrue(result.equals(1l));
} catch (ALNTApplicationException e) {
assertFalse(false);
}
}
}
我无法模仿IdentityActionsCache。getInstance()。getIdentityActionsByName(操作)获取空指针
JAVAcom上的lang.NullPointerException。alnt公司。idm。使用者身份服务。IdentityService测试。sun上的getDuplicateCheckNotificationJSONTest(IdentityServiceTest.java:70)。反映NativeMethodAccessorImpl。在sun调用0(本机方法)。反映NativeMethodAccessorImpl。在sun调用(未知源)。反映DelegatingMethodAccessorImpl。在java上调用(未知源)。lang.reflect。方法在组织中调用(未知源)。朱尼特。内部的跑步者。测试方法。在org调用(TestMethod.java:68)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner。org上的runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:310)。朱尼特。内部的跑步者。MethodRoadie 2美元。在org上运行(MethodRoadie.java:89)。朱尼特。内部的跑步者。MethodRoadie。在org上运行beforesthentestthenauts(MethodRoadie.java:97)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner。org上的executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)。powermock。模块。junit4。内部的实施。PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner。org上的ExecuteTestinsteSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)。powermock。模块。junit4。内部的实施。PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner。org上的executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner。在org上运行beforesthentestthenurts(powermockjunit44runnerdelegateinpl.java:282)。朱尼特。内部的跑步者。MethodRoadie。在org上运行测试(MethodRoadie.java:87)。朱尼特。内部的跑步者。MethodRoadie。在org上运行(MethodRoadie.java:50)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl。org上的invokeTestMethod(powermockjunit44runnerdelegatepimpl.java:207)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl。org上的runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl 1美元。在org上运行(PowerMockJUnit44RunnerDelegateImpl.java:120)。朱尼特。内部的跑步者。ClassRoadie。org上的runUnprotected(ClassRoadie.java:34)。朱尼特。内部的跑步者。ClassRoadie。org上的runProtected(ClassRoadie.java:44)。powermock。模块。junit4。内部的实施。PowerMockJUnit44RunnerDelegateImpl。在org上运行(PowerMockJUnit44RunnerDelegateImpl.java:122)。powermock。模块。junit4。常见的内部的实施。JUnit4TestSuiteChunkerImpl。在org上运行(JUnit4TestSuiteChunkerImpl.java:106)。powermock。模块。junit4。常见的内部的实施。AbstractCommonPowerMockRunner。在org上运行(AbstractCommonPowerMockRunner.java:53)。powermock。模块。junit4。PowerMockRunner。在org上运行(PowerMockRunner.java:59)。日食jdt。内部的junit4。跑步者JUnit4TestReference。在org上运行(JUnit4TestReference.java:86)。日食jdt。内部的朱尼特。跑步者测试执行。在org上运行(TestExecution.java:38)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行测试(RemoteTestRunner.java:538)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行测试(RemoteTestRunner.java:760)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。在org上运行(RemoteTestRunner.java:460)。日食jdt。内部的朱尼特。跑步者RemoteTestRunner。main(RemoteTestRunner.java:206)
这是因为您需要模拟静态调用和实例调用
@RunWith(PowerMockRunner.class)
@PrepareForTest({IdentityService.class, IdentityActionsCache.class})
public class IdentityServiceTest {
@InjectMocks
IdentityService identityService;
@Test
public void getDuplicateCheckNotificationJSONTest() {
List<Map<String, Object>> result;
try {
//Arrange
//...other members missing
PowerMockito.mockStatic(ServiceLocator.class);
when(ServiceLocator.findService("workflowConfigDataService"))
.thenReturn(workflowConfigDataService);
IdentityActions identityActions = new IdentityActions();
IdentityActionsCache cacheMock = mock(IdentityActionsCache.class); //instance mock
when(cacheMock.getIdentityActionsByName(action)).thenReturn(identityActions);
PowerMockito.mockStatic(IdentityActionsCache.class);
when(IdentityActionsCache.getInstance()).thenReturn(cacheMock); //static call returns instance
//Act
result = identityService.getDuplicateCheckNotificationJSON(action);
//Assert
assertTrue(result.equals(1l));
} catch (ALNTApplicationException e) {
assertFalse(false);
}
}
}
问题内容: 这三种方法(都用于将一个数组转换为另一个数组)之间的性能差异(如果有)是什么? 使用 使用和λ/关闭功能 使用带有“静态”函数/方法 还有其他方法吗? 为了使自己清楚,让我们看一下这些示例,它们都做同样的事情-将数字数组乘以10: 佛瑞奇 带有lambda的地图 具有“静态”功能的地图,作为字符串引用传递 还有其他方法吗?我将很高兴听到上面案例之间的 所有 实际差异,以及为什么要使用一
null 还有其他办法吗?我将很高兴听到实际所有的差异之间的情况从上面,以及任何输入为什么应该使用一个而不是其他。
我找不到和之间的任何区别。据我所知,类静态函数不能被继承,struct也没有继承的选项。 请不要被类中的静态函数和类函数所混淆。 VS
问题内容: 我对php中的静态功能有疑问。 假设我有一堂课 如果我这样做的话,没有问题。 也可以。 头等舱和二等舱有什么区别? 静态函数有什么特别之处? 问题答案: 在第一个类中,实际上是一个实例方法,您将其作为静态方法进行调用,但由于从未引用,所以您将其取消。 静态函数与该类相关联,而不是该类的实例。因此,在静态上下文中不可用(未指向任何对象)。
问题内容: 按照标准书,构造函数是用于初始化对象的一种特殊类型的函数。由于构造函数被定义为一个函数,并且内部类函数只能具有两种类型的静态或非静态类型。我怀疑是什么构造函数? 我的疑问是如果构造函数是静态方法,那么我们如何在构造函数内部频繁使用此方法 输出是否意味着构造函数是非静态的? 问题答案: 您的第二个例子很重要。引用在构造函数中可用,这意味着构造函数是针对某个对象(当前正在创建的对象)执行的
问题内容: 这些对象调用之间有什么区别? 非静态: 静态的: 而且在内部为什么还要对函数使用static属性? 例: 问题答案: 静态函数,根据定义,不能也不依赖于该类的任何实例属性。也就是说,它们不需要类的实例来执行(因此,可以如您所显示的那样执行,而无需先创建实例)。从某种意义上讲,这意味着该函数不必(也永远不需要)依赖于类的成员或方法(公共或私有)。