使用模拟实体管理器测试DAO方法在测试Exception时遇到问题

时间:2017-01-31 15:30:18

标签: java unit-testing mocking persistence

我有一个简单的DAO方法,我正在尝试测试:

public boolean insertUser (User user) throws DaoException {
    boolean result = false;

    try {
        em.persist(user);
        result = true;
    } catch ( Exception e) {
        throw new DaoException( e );
    }

    return result;
}

因为持久化可以返回异常,我想对这种情况进行单元测试:

我嘲笑了实体经理:

@Mock
EntityManager mockEm;

我的测试:

@Test
public void testExceptionEntityExistInsertUser() throws Exception {
    System.out.println("entity already exist exception");
    boolean result;
    when(mockEm.persist(user)).thenThrow(EntityExistsException.class);
    result = userDao.insertUser(user);
}

但在线时(mockEm.persist(user))。thenThrow(EntityExistsException.class);我有以下错误: 'void'类型不允许在这里

我不明白问题的来源。

1 个答案:

答案 0 :(得分:0)

解决方案是设置不允许的实体数据。例如,当此数据具有@NotNull标记时,数据为null:

@Test
public void testExceptionEntityExistInsertUser() throws Exception {
    System.out.println("entity already exist exception");
    boolean result;
    user.setData(null) // assuming data has a NotNull tag
    result = userDao.insertUser(user);
}

然后测试会产生异常。