我有以下 class
public class EmployeeService{
private final EmployeeRepository employeeRepo;
private final Map<String, Employee> cache;
@Autowired
public EmployeeService(EmployeeRepository employeeRepo, Map<String, Employee> cache){
this.employeeRepo = employeeRepo;
this.cache = cache;
}
public void loadFromDB(){
//repo call
cache.put("123", {employee object})
}
}
我想為此撰寫一個 junit,我需要檢查該值是否插入到快取中。我在下面嘗試過,但快取中沒有任何價值。
@Mock
private EmployeeRepository employeeRepo;
@Mock
private Map<String, Employee> cache;
@InjectMocks
private EmployeeService employeeService;
@BeforeEach
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
employeeService = new EmployeeService(employeeRepo, cache);
}
@Test
public void shouldLoadDataFromDBtoCache(){
when(employeeRepo.findActiveEmployee()).thenReturn(buildDataFromDB());
EmployeeService.loadFromDB();
Assertions.assertFalse(cache.isEmpty());
//Assertions.assertTrue(cache.containsKey("1625"));
//Assertions.assertTrue(cache.containsKey("1525"));
//Assertions.assertFalse(cache.containsKey("1425"));
}
為了cache.containsKey()
獲得assertion error
當我檢查快取地圖的大小是零。
Assertions.assertFalse(cache.isEmpty()); // this is success.
我如何測驗hashmap containsKey
如上。
uj5u.com熱心網友回復:
從我可以看到您需要的最小更改如下:
@Mock
private EmployeeRepository employeeRepo;
private Map<String, Employee> cache = new HashMap<>();
private EmployeeService employeeService = new EmployeeService(employeeRepo, cache);
@Test
public void shouldLoadDataFromDBtoCache(){
when(employeeRepo.findActiveEmployee()).thenReturn(buildDataFromDB());
employeeService.loadFromDB();
Assertions.assertFalse(cache.isEmpty());
//Assertions.assertTrue(cache.containsKey("1625"));
//Assertions.assertTrue(cache.containsKey("1525"));
//Assertions.assertFalse(cache.containsKey("1425"));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/310821.html