为什么不随意工作?

Jan*_*aya 0 java testing random

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

Random id = new Random();
vacationId = id.nextInt(2500);
Run Code Online (Sandbox Code Playgroud)

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

vacationId = 2500;
Run Code Online (Sandbox Code Playgroud)

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

这是整个方法

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);
}
Run Code Online (Sandbox Code Playgroud)

这是测试的主体:

@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);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

我怀疑是你得到的地方NullPointerException:

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

这是您设置它之前Random - 您将参数设置为空值.

说实话,这不是从数据库中查找随机记录的好方法,除非您知道每个ID从0到2499都有假期.

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