Mockito-没有为其中一个测试用例注入模拟 [英] Mockito - Mock not being injected for one of the testcases

查看:67
本文介绍了Mockito-没有为其中一个测试用例注入模拟的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆