2 回答

TA貢獻1784條經驗 獲得超9個贊
等待時間較短的運行時問題在分布式系統中非常普遍。為了解決等待測試斷言太久的需要,有一個名為Waitility的小工具。
有了這個,你基本上可以通過在特定的時間間隔內多次查詢斷言來做更聰明的等待,直到達到給定的超時(...以及更多)。
關于您的示例,請嘗試以下操作:
Awaitility.await() .pollInterval(new Duration(1, TimeUnit.SECONDS)) .atMost(new Duration(10, TimeUnit.SECONDS)) .untilAsserted(() -> User user1 = userService.findbyId("1234"); assertThat(user1.getName()).isEqualTo(user.getName());
關于問題的另一部分,在集成測試中,您實際上可以對實例執行某種預熱,或者如果您有容器化集成測試(例如Docker),則可以對其發出一些第一個請求,或者在開始測試之前等待某個條件。Redis

TA貢獻1860條經驗 獲得超8個贊
實際問題不在于線程等待時間。要使 Redis 緩存正常工作,需要跨越一個單獨的線程。對于我的服務測試,我通過一個單獨的測試用例對其進行了測試。
@Test
public void getUserById() {
User user = new User("name", "1234");
when(userRepository.findbyId("1234")).thenReturn(Optional.ofNullable(user));
// first method call
User user1 = userService.findbyId("1234");
assertThat(user.getName()).isEqualTo(user1.getName());
assertThat(user.getId).isEqualTo(user1.getId());
}
//ensure this test case is executed after getUserById. I used
//@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@Test
public void getUserById_cache() {
User user1 = userService.findbyId("1234");
Mockito.verify(userRepository, never()).findbyId("1234")
assertThat(user.getName()).isEqualTo(user1.getName());
assertThat(user.getId).isEqualTo(user1.getId());
}
添加回答
舉報