diff --git a/hippo4j-core/pom.xml b/hippo4j-core/pom.xml index 7088a3f1..2429039c 100644 --- a/hippo4j-core/pom.xml +++ b/hippo4j-core/pom.xml @@ -20,5 +20,9 @@ spring-boot-starter-test test + + org.mockito + mockito-inline + diff --git a/hippo4j-core/src/test/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandlerTest.java b/hippo4j-core/src/test/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandlerTest.java new file mode 100644 index 00000000..5e47f293 --- /dev/null +++ b/hippo4j-core/src/test/java/cn/hippo4j/core/proxy/RejectedProxyInvocationHandlerTest.java @@ -0,0 +1,58 @@ +package cn.hippo4j.core.proxy; + +import cn.hippo4j.common.api.ThreadPoolCheckAlarm; +import cn.hippo4j.common.config.ApplicationContextHolder; +import org.junit.Before; +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.context.ApplicationContext; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.concurrent.atomic.AtomicLong; + + +@RunWith(MockitoJUnitRunner.class) +public class RejectedProxyInvocationHandlerTest { + + @Mock + private ThreadPoolCheckAlarm mockAlarmHandler; + + @Mock + private ApplicationContext applicationContext; + + @Mock + private Method mockMethod; + private RejectedProxyInvocationHandler handler; + + @Before + public void setUp() { + Object target = new Object(); + String threadPoolId = "test-pool"; + AtomicLong rejectCount = new AtomicLong(0); + handler = new RejectedProxyInvocationHandler(target, threadPoolId, rejectCount); + } + + @Test + public void testInvoke() throws Throwable { + + Object[] mockArgs = new Object[] {"arg1", "arg2"}; + MockedStatic mockedStatic = Mockito.mockStatic(ApplicationContextHolder.class); + mockedStatic.when(ApplicationContextHolder::getInstance).thenReturn(applicationContext); + mockedStatic.when(() -> ApplicationContextHolder.getBean(ThreadPoolCheckAlarm.class)).thenReturn(mockAlarmHandler); + Mockito.doNothing().when(mockAlarmHandler).asyncSendRejectedAlarm("test-pool"); + handler.invoke(null, mockMethod, mockArgs); + + Mockito.when(mockMethod.invoke(new Object(), mockArgs)).thenThrow(new IllegalAccessException()); + try { + handler.invoke(null, mockMethod, mockArgs); + } catch (Exception ex){ + Assertions.assertTrue(ex instanceof InvocationTargetException); + } + } +}