温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java Proxy 代理如何测试

发布时间:2026-08-31 23:33:57 来源:亿速云 阅读:86 作者:小樊 栏目:编程语言

在 Java 中,“Proxy 代理”通常有两种常见含义,不同场景测试方法也不一样:


一、JDK 动态代理(java.lang.reflect.Proxy)如何测试

1. 示例代码

public interface UserService {
    void save();
}

public class UserServiceImpl implements UserService {
    public void save() {
        System.out.println("save user");
    }
}

public class LogHandler implements InvocationHandler {
    private Object target;

    public LogHandler(Object target) {
        this.target = target;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("before");
        Object result = method.invoke(target, args);
        System.out.println("after");
        return result;
    }
}

2. 单元测试(JUnit 5)

@Test
void testProxy() {
    UserService target = new UserServiceImpl();
    UserService proxy = (UserService) Proxy.newProxyInstance(
            target.getClass().getClassLoader(),
            new Class[]{UserService.class},
            new LogHandler(target)
    );

    proxy.save();

    // 可验证行为(如使用 Mockito)
}

3. 使用 Mockito 验证代理逻辑

@Test
void testProxyWithMock() {
    UserService mock = Mockito.mock(UserServiceImpl.class);
    UserService proxy = (UserService) Proxy.newProxyInstance(
            mock.getClass().getClassLoader(),
            new Class[]{UserService.class},
            new LogHandler(mock)
    );

    proxy.save();

    Mockito.verify(mock).save();
}

二、Spring AOP / Spring Proxy 如何测试

1. 测试 AOP 代理

@SpringBootTest
class UserServiceTest {

    @Autowired
    UserService userService;

    @Test
    void testAopProxy() {
        userService.save();
        // 验证日志、事务等是否生效
    }
}

2. 判断是否是代理对象

assertTrue(AopUtils.isAopProxy(userService));
assertTrue(AopUtils.isJdkDynamicProxy(userService) 
        || AopUtils.isCglibProxy(userService));

三、网络代理(HTTP Proxy)如何测试

1. 设置 JVM 代理

System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");

2. 测试代理是否生效

URL url = new URL("http://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
assertEquals(200, conn.getResponseCode());

3. 使用 WireMock / MockServer 模拟代理


四、常见测试要点总结

✅ 验证方法是否被正确调用
✅ 验证增强逻辑(日志、事务、权限)是否执行
✅ 验证异常是否被代理捕获
✅ 验证代理类型(JDK / CGLIB)
✅ 验证网络代理连通性


如果你指的是 某种具体的 Proxy(Spring / MyBatis / RPC / HTTP),可以告诉我,我给你更精确的测试方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI