From db880bb0da4c74d22ed568aacdf110c56fc836ca Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Sat, 19 Sep 2026 23:19:59 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E4=BF=AE=E5=A4=8D=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=8E=BB=E9=87=8D=E8=BF=87=E6=9C=9F=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=9A=84=E5=81=B6=E5=8F=91=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WxMessageInMemoryDuplicateCheckerTest.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java b/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java index fd8819272..6fd7187c2 100644 --- a/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java +++ b/weixin-java-common/src/test/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateCheckerTest.java @@ -9,9 +9,8 @@ import static org.testng.Assert.assertTrue; @Test public class WxMessageInMemoryDuplicateCheckerTest { - private WxMessageInMemoryDuplicateChecker checker = new WxMessageInMemoryDuplicateChecker(2000L, 1000L); - public void test() throws InterruptedException { + WxMessageInMemoryDuplicateChecker checker = new WxMessageInMemoryDuplicateChecker(2000L, 1000L); Long[] msgIds = new Long[]{1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L}; // 第一次检查 @@ -20,18 +19,22 @@ public class WxMessageInMemoryDuplicateCheckerTest { assertFalse(result); } - // 过1秒再检查 - TimeUnit.SECONDS.sleep(1); + // 未过期时应识别为重复消息 for (Long msgId : msgIds) { boolean result = checker.isDuplicate(String.valueOf(msgId)); assertTrue(result); } - // 过1.5秒再检查 - TimeUnit.MILLISECONDS.sleep(1500L); + // 过期记录由后台线程定期清理,不能假定 TTL 到达后立即被删除。 + long deadline = System.nanoTime() + TimeUnit.SECONDS.toNanos(10); for (Long msgId : msgIds) { boolean result = checker.isDuplicate(String.valueOf(msgId)); - assertFalse(result); + while (result && System.nanoTime() < deadline) { + TimeUnit.MILLISECONDS.sleep(20L); + result = checker.isDuplicate(String.valueOf(msgId)); + } + assertFalse(result, "Expired message was not cleared: " + msgId); + assertTrue(checker.isDuplicate(String.valueOf(msgId))); } }