Mockito-没有为其中一个测试用例注入模拟 [英] Mockito - Mock not being injected for one of the testcases
问题描述
我有一个jsf spring应用程序,并使用 mockito 进行单元测试.在iEmployeeService
模拟中运行junit
测试时,我一直得到NullPointerException
. iSecurityLoginService
没有Exception
.
I have a jsf spring application and using mockito for my unit test. I keep getting NullPointerException
when i run my junit
test in iEmployeeService
mocking. There are not Exception
for iSecurityLoginService
.
要模拟的方法
@Autowired
IEmployeeService iEmployeeService;
@Autowired
ISecurityLoginService iSecurityLoginService;
public void addEvent() {
entityEventsCreate.setTitle(entityEventsCreate.getTitle());
entityEventsCreate.setModifiedBy(iSecurityLoginService
.findLoggedInUserId());
int eventId = iEmployeeService.addEmployeeTimeOff(entityEventsCreate);
}
我的JUnit测试用@RunWith(MockitoJUnitRunner.class)
My JUnit test is annotated with @RunWith(MockitoJUnitRunner.class)
@Mock
ISecurityLoginService iSecurityLoginService;
@Mock
IEmployeeService iEmployeeService;
@InjectMocks
ServiceCalendarViewBean serviceCalendarViewBean = new ServiceCalendarViewBean();
@Before public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testSaveEvent() {
Mockito.when(iSecurityLoginService.findLoggedInUserId()).thenReturn(1);
serviceCalendarViewBean.getEntityEventsCreate().setTitle("Junit Event Testing");
Mockito.when(iSecurityLoginService.findLoggedInUserId()).thenReturn(1);
Mockito.when(iEmployeeService.addEmployeeTimeOff(Mockito.any(Events.class))).thenReturn(2);
serviceCalendarViewBean.addEvent();
}
推荐答案
我解决了这个问题.在我的spring bean中,我有2个对象用于相同的服务接口.因此为第一个接口对象设置了模拟.
I solved the problem..In my spring bean, i had 2 objects for the same service interface. so the mock was being set for the first interface object.
例如:我的豆子里有
@Autowired
IEmployeeService employeeService;
@Autowired
IEmployeeService iEmployeeService;
因此,正在为与名称无关的第一个服务对象注入针对IEmployeeservice接口的模拟创建.
So the mock create for the IEmployeeservice interfaces was being inject for the first service object irrelevant for their names.
@Mock
IEmployeeService iEmployeeService;
即,将模拟对象"iEmployeeService"注入到"employeeService" bean中.
ie, the mock object 'iEmployeeService' was injected to beans 'employeeService' .
感谢所有帮助过我们的人..:)
Thank you for all those who helped..:)
这篇关于Mockito-没有为其中一个测试用例注入模拟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!