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

将Mockito Mock SessionFactory加入DAO测试类

狄兴业
2023-03-14

我是JUnit和Mockito的新手,我想在我的DAO测试课中模拟我的SessionFactory,这就是我继续的方式:

@RunWith(MockitoJUnitRunner.class)
public class TodoDaoTest {
    @Mock 
    SessionFactory sessionFactory;

    @InjectMocks 
    TodoDao todoDao;

    @Mock
    Session session;
    @Mock
    Query query;


    @BeforeClass
    public static void setUpClass(){
    }

    @Before
    public void setUp(){
        Mockito.when(query.setParameter(any(int.class), any(Object.class))).thenReturn(query);
        Mockito.when(session.createQuery(any(String.class))).thenReturn(query);
        Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void getTodosByUserIdShouldNotReturnNull(){
        User user = new User();
        assertNotNull(todoDao.getTodosByUserId(user.getId()));
    }
}

这是我的刀类

@Component
@Transactional
public class TodoDao implements ITodoDao {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    @PostFilter("filterObject.userByUserId == authenticationFacade.getAuthenticatedFacade()")
    public List<Todo> getTodosByUserId(int userId) {
        List todos;
        todos = sessionFactory.getCurrentSession().createQuery("from Todo where userId = ?").setParameter(0, userId).list();
        return todos;
    }
}

但是当我运行我的测试时,我有一个< code > Java . lang . NullPointerException 异常,nullPointerException在< code > todos = session factory . getcurrentsession()行的级别。创建查询(...)

共有2个答案

司徒经纶
2023-03-14

的。create query(" from Todo where userId =?")方法调用返回null。您也应该设置模拟会话。

徐凌
2023-03-14

在一个测试中,如果我放置<code>MockitoAnnotations,我当前打开了它。initMocks(this)在<code>Mockito.when(…)。然后返回(…)。

尝试做初始化,然后做模拟。

我的理解是,MockitoAnnotations.initMocks(this)初始化了存根依赖项。然后,这将允许 when(...)。然后返回(...)要在存根上设置的行为。如果您尝试先设置行为,则依赖项尚未初始化,因此是 NullPointerException。

在摩奇托的javadoc中有一些描述

 类似资料:
  • DAO类的相关方面如下 我的src/test/resources/application.properties文件如下所示 在Eclipse中作为JUnit测试运行的跟踪 应用程序结构 -SRC ----application.java ----COM ----Hitstpa ----application.properties --测试 ---爪哇

  • customer-Mapper.xml daoimpl.java

  • 我正在使用JUnit测试一个DAO类,我得到了一个nullpointerexception,我不知道为什么要启动服务类。以下是测试类: 以下是UserDaoImpl 如何在测试类中注入类?我想nullpointerxeception的原因是dao类没有正确地注入到测试类中

  • 我想测试我的Spring应用程序。当我将@SpringBootTest添加到我的测试类中时,即使我等待了一个多小时,测试也会挂起并且不会开始!删除SpringBootTest注释会导致初始化@Value字段失败,并且我无法测试任何组件类。我的配置类代码: 我的测试类: 运行测试类时的堆栈跟踪: 当我运行该测试时,该测试处于挂起状态:

  • 问题内容: 我已经开始发现Mockito库,并且有一个我没有找到正确答案的问题。 例如,如果我的UserDAO类中有将用户保存到数据库中的此类方法: 我应该如何测试? 如果我想测试一个DAO类,那么我需要创建一个模拟,模拟,模拟等吗?如此不测试数据库本身? 但是,如果我还想测试dao和数据库的行为怎么办? 您能否提供一些代码示例,可能有用的链接,并显示实现此目的的最佳方法? 问题答案: 这是使用M

  • 我开始使用Dropwizard,并尝试创建一个需要使用数据库的命令。如果有人想知道我为什么要这么做,我可以提供很好的理由,但这不是我的问题的重点。它是关于Dropwizard中的依赖关系反转和服务初始化和运行阶段。 Dropwizard鼓励使用其DbiFactory构建DBI实例,但为了获得一个实例,您需要实例和/或数据库配置: 如您所见,您的 方法中有服务及其环境的配置,但需要在其 方法中将命令