当前位置: 首页 > 知识库问答 >
问题:

mockito-mock未为其中一个测试案例注入

孙绍辉
2023-03-14

我有一个jsf spring应用程序,并使用mockito进行单元测试。在IEmployeeService模拟中运行JUnit测试时,我一直得到NullPointerException。对于isecurityloginservice不存在exception

要嘲弄的方法

@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)注释的

@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();
}

共有1个答案

陆浩博
2023-03-14

与问题无关,但有用的知道!

如果使用@runwith(MockitoJunitRunner.class)对测试进行注释,则不需要mockitoAnnotations.initMocks(this);(它甚至可能在注入时导致问题),则mockito运行程序将执行注入和其他填充以验证模拟。

同时拥有mock init机制可能会导致注入和截尾问题,这是由于JUnit测试的生命周期以及mockito单元集成代码的使用方式:

  1. 运行程序将创建模拟并将这些模拟注入到测试对象中。
  2. @before方法启动并重新创建新的模拟,并且可能不会执行注入,因为对象已经初始化。
 类似资料:
  • 我正在使用SpringRunner运行JUnit mockito测试用例,下面是类,我试图编写测试用例,但得到空对象 //Junit测试用例 但是下面的代码即使在模拟这个之后仍然返回空值,你能帮助如何模拟这个吗? 注意:只有Mockito需要使用无powermockito

  • 我试图使用REST Sandured测试一个REST控制器(使用Quarkus)endpoint。我想模拟一个注入到控制器中的类(最好是用Mockio),但只用于我的一个测试。或者每个测试用例获得不同的行为,而不必为每个测试提供单独的类。我不知道该怎么做? 我从文档中看到过这样做:

  • 我是JUnit和Mockito的新手,我想在我的DAO测试课中模拟我的SessionFactory,这就是我继续的方式: 这是我的刀类 但是当我运行我的测试时,我有一个< code > Java . lang . NullPointerException 异常,nullPointerException在< code > todos = session factory . getcurrentses

  • 主要内容:代码的说明在本节中,将学习如何创建第一个Selenium自动化测试脚本。 在此测试下,将自动执行以下测试操作: 调用Firefox浏览器。 打开网址: www.baidu.com 点击百度搜索文本框。 输入关键字 - “小牛知识库” 单击“搜索”按钮。 接下来将逐步创建测试用例,以便详细了解每个组件。 第1步 - 启动Eclipse IDE并打开在本教程的上一节(配置Selenium WebDriver)中

  • 我有一个包含三个命名的@resource成员的类,如下所示: 从1.8.5升级到Mockito 1.9.5后,测试开始失败。测试套件仅模拟了一次PaginationRequestValidator,如下所示: 这导致只有三个实例中的第三个被注入,如下sysout所示: 显然,两个版本之间的行为发生了变化。我假设旧版本将mock注入到所有三个字段中--这对我来说仍然是一个可以接受的解决方案。 作为一

  • 本文向大家介绍Spring Boot单元测试中使用mockito框架mock掉整个RedisTemplate的示例,包括了Spring Boot单元测试中使用mockito框架mock掉整个RedisTemplate的示例的使用技巧和注意事项,需要的朋友参考一下 概述 当我们使用单元测试来验证应用程序代码时,如果代码中需要访问Redis,那么为了保证单元测试不依赖Redis,需要将整个Redis