From 912ba354e992afc162b124e97e1ef9fcaf1fb4cd Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Dec 2025 16:12:56 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#3821=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E4=BF=AE=E5=A4=8D=20WxCpRedisConfig?= =?UTF-8?q?Impl.getWebhookKey()=20=E6=96=B9=E6=B3=95=E6=97=A0=E9=99=90?= =?UTF-8?q?=E9=80=92=E5=BD=92=E8=B0=83=E7=94=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/config/impl/WxCpRedisConfigImpl.java | 2 +- .../config/impl/WxCpRedisConfigImplTest.java | 48 +++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImplTest.java diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java index 15c0ff672..49cd7c455 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java @@ -468,7 +468,7 @@ public class WxCpRedisConfigImpl implements WxCpConfigStorage { @Override public String getWebhookKey() { - return this.getWebhookKey(); + return this.webhookKey; } @Override diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImplTest.java new file mode 100644 index 000000000..1a7fdccbd --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImplTest.java @@ -0,0 +1,48 @@ +package me.chanjar.weixin.cp.config.impl; + +import org.mockito.Mockito; +import org.testng.Assert; +import org.testng.annotations.Test; +import redis.clients.jedis.JedisPool; + +/** + * WxCpRedisConfigImpl 测试类 + */ +public class WxCpRedisConfigImplTest { + + /** + * 测试 getWebhookKey 方法不会导致无限递归 + * 这个测试验证了 #issue 中提到的无限递归问题已被修复 + */ + @Test + public void testGetWebhookKeyNoInfiniteRecursion() { + // 使用 Mockito 创建 mock JedisPool,避免真实连接 + JedisPool jedisPool = Mockito.mock(JedisPool.class); + + WxCpRedisConfigImpl config = new WxCpRedisConfigImpl(jedisPool); + + // 测试1: webhookKey 为 null 时应该返回 null,而不是抛出 StackOverflowError + String webhookKey = config.getWebhookKey(); + Assert.assertNull(webhookKey, "未设置 webhookKey 时应返回 null"); + + // 测试2: 通过反射设置 webhookKey,然后验证能够正确获取 + // 注意:由于 WxCpRedisConfigImpl 没有提供 setWebhookKey 方法, + // 我们通过反射来设置这个字段以测试 getter 的正确性 + try { + java.lang.reflect.Field field = WxCpRedisConfigImpl.class.getDeclaredField("webhookKey"); + boolean originalAccessible = field.isAccessible(); + field.setAccessible(true); + try { + String testWebhookKey = "test-webhook-key-123"; + field.set(config, testWebhookKey); + + String retrievedKey = config.getWebhookKey(); + Assert.assertEquals(retrievedKey, testWebhookKey, "应该返回设置的 webhookKey 值"); + } finally { + field.setAccessible(originalAccessible); + } + } catch (NoSuchFieldException | IllegalAccessException e) { + Assert.fail("反射设置 webhookKey 失败: " + e.getMessage()); + } + } +}