簡體   English   中英

如何在 Java 單元測試中斷言無序的 HashSet 元素?

[英]How to assert unordered HashSet elements in Java Unit Test?

我有一個返回HashSet<T>的服務方法的單元測試,我在測試方法中得到它,如下所示:

Set<EmployeeDTO> result = employeeService.findAllByUuid(uuid);
        
// I also convert the set to list for accessing by index:
List<EmployeeDTO> resultList = new ArrayList<>(result);

並嘗試斷言如下所示:

assertEquals("Hans", resultList.get(0).getName());

但是,結果集中有 2 個元素,正如預期的那樣, HashSet中的順序正在發生變化。 在這個場景中,當我收到HashSet作為被測方法的返回類型時,我應該如何進行斷言?

如果順序可以更改,您可以簡單地斷言該集合包含該值,因為順序更改意味着您沒有理由期望特定值出現在特定索引處:

@Test
void testSetContainsHans(String uuid) {
  Set<EmployeeDTO> result = employeeService.findAllByUuid(uuid);
  boolean containsHans = false;
  for (EmployeeDTO emp : result) {
    if ("Hans".equals(emp.getName()) {
      containsHans = true;
      break;
    }
  }
  assertTrue(containsHans, "No employee named Hans was found.");
}

如果employeeService.findAllByUuid(uuid)返回的集合包含至少一個名為“Hans”的EmployeeDTO ,則此測試將通過,或者失敗並顯示"No employee named Hans was found." 如果沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM