在 Java 中,“Proxy 代理”通常有两种常见含义,不同场景测试方法也不一样:
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;
}
}
@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)
}
@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();
}
@SpringBootTest
class UserServiceTest {
@Autowired
UserService userService;
@Test
void testAopProxy() {
userService.save();
// 验证日志、事务等是否生效
}
}
assertTrue(AopUtils.isAopProxy(userService));
assertTrue(AopUtils.isJdkDynamicProxy(userService)
|| AopUtils.isCglibProxy(userService));
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
URL url = new URL("http://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();
assertEquals(200, conn.getResponseCode());
✅ 验证方法是否被正确调用
✅ 验证增强逻辑(日志、事务、权限)是否执行
✅ 验证异常是否被代理捕获
✅ 验证代理类型(JDK / CGLIB)
✅ 验证网络代理连通性
如果你指的是 某种具体的 Proxy(Spring / MyBatis / RPC / HTTP),可以告诉我,我给你更精确的测试方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。