为什么不随意工作?

时间:2013-07-10 12:36:12

标签: java testing random

我必须编写一个方法,它能够在数据库中找到随机假期。但是当我在测试中使用这部分时

Random id = new Random();
vacationId = id.nextInt(2500);

我得到NullPoiterExeption。 但是当我打印时

vacationId = 2500;

或其他一些数字,一切都很好。

这是整个方法

public Vacation findRandomVacation() {
    Integer vacationId = null;
    Query query = entityManager.createQuery("from Vacation v where v.id = :id")
                .setParameter("id", vacationId);
    if  ( query.getResultList().isEmpty()) {
        Random id = new Random();
        vacationId = id.nextInt(2500);
        query = entityManager.createQuery("from Vacation v where v.id = :id")
               .setParameter("id", vacationId);
    }
    return (Vacation) query.getResultList().get(0);
}

这是测试的主体:

@Test
public void testVacationApprovalResultDao () {
    Vacation testVacation = findRandomVacation();
    VacationApproval testVacationApproval = findVacationApprovalDAO(testVacation);
    List<VacationApprovalResult> testVacationApprovalResult = getVacationApprovalResultByManager(testVacationApproval);
    Set<VacationApprovalResult> setVacationApprovalResult = testVacationApproval.getVacationApprovalResults();   //mistake is here
    List<VacationApprovalResult> testVacationApprovalResult2 = new ArrayList<VacationApprovalResult> ();
    testVacationApprovalResult2.addAll(setVacationApprovalResult);

    assertEquals(testVacationApprovalResult, testVacationApprovalResult2);
}

3 个答案:

答案 0 :(得分:6)

我怀疑这个是你获得NullPointerException

的地方
Integer vacationId = null;
Query query = entityManager.createQuery("from Vacation v where v.id = :id")
            .setParameter("id", vacationId);

这是之前你是从Random设置的 - 你将参数设置为空值。

老实说,这不是从数据库中查找随机记录的好方法,除非你知道假设每个ID都在0到2499之间。

基本上,您希望随机选择在数据库中执行,就像数据所在的那样。另一种方法是获取所有度假ID,选择该组的随机元素,然后为其加载数据 - 但这也不愉快。

答案 1 :(得分:0)

变化

 Integer vacationId = null;

Integer vacationId = 0;

答案 2 :(得分:0)

你为什么要这样做?

Integer vacationId = null;
Query query = entityManager.createQuery("from Vacation v where v.id = :id")
            .setParameter("id", vacationId);

vacationId有可能保持空值吗?如果没有,那么立即尝试随机。