当前位置: 首页 > news >正文

代理对象的mock

demo类定义如下:

public class Handler implements InvocationHandler {private SetBeanBInterface setBeanB;public Handler(SetBeanBInterface b) {this.setBeanB = b;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("0000000");return method.invoke(setBeanB, args);}
}
@Service
public class SetBeanA implements SetBeanAInterface {private SetBeanBInterface setBeanB; // 实际值是setSetBeanB里设置的代理对象@Overridepublic void ffun() {System.out.println(setBeanB.fun());}@Autowiredpublic void setSetBeanB(SetBeanBInterface setBeanB) {this.setBeanB = (SetBeanBInterface) Proxy.newProxyInstance(setBeanB.getClass().getClassLoader(),setBeanB.getClass().getInterfaces(), new Handler(setBeanB));}
}
public interface SetBeanBInterface {String fun();
}
@Service
public class SetBeanB implements SetBeanBInterface {@Overridepublic String fun() {return "12345";}
}
// testng + @Mock + @InjectMocks
@SpringBootTest // 启动完整 SpringBoot 应用上下文
public class SetBeanTest extends AbstractTestNGSpringContextTests {@BeforeClass // 这里和 @TestExecutionListeners(MockitoTestExecutionListener.class) 二选一即可public void init() {MockitoAnnotations.openMocks(this);}@InjectMocksprivate SetBeanA setBeanA;@Mockprivate SetBeanBInterface setBeanBInterface;@Testpublic void test1() {// 设置 mockB 的行为when(setBeanBInterface.fun()).thenReturn("mocked result");setBeanA.ffun();}
}

测试类

// testng + @Mock + @InjectMocks
@SpringBootTest // 启动完整 SpringBoot 应用上下文
public class SetBeanTest extends AbstractTestNGSpringContextTests {@BeforeClass // 这里和 @TestExecutionListeners(MockitoTestExecutionListener.class) 二选一即可public void init() {MockitoAnnotations.openMocks(this);}@InjectMocksprivate SetBeanA setBeanA;@Mockprivate SetBeanBInterface setBeanBInterface;@Testpublic void test1() {// 设置 mockB 的行为when(setBeanBInterface.fun()).thenReturn("mocked result");setBeanA.ffun();}
}

输出:0000000 (表示走进了代理逻辑)

           mocked result (表示被代理的对象被mock成功了)

http://www.xdnf.cn/news/222013.html

相关文章:

  • 数据库所有知识
  • 随机游走之 个人的简单理解
  • 通义千问Qwen3全维度解析
  • Windows系统下,导入运行 RuoYi-Vue3 项目
  • 批量打印工具使用全攻略
  • 深度循环神经网络
  • 链表反转操作经典问题详解
  • python之数字类型的操作
  • 【linux网络】网络基础概念
  • 从零构建Dagster分区管道:时间+类别分区实战案例
  • 企业的AI转型:生死时速的进化之路
  • 再学GPIO(三)
  • 系统设计中三高指什么
  • OpenGL学习笔记(PBR)
  • LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding
  • 大模型与MCP:重塑AI应用的新篇章
  • 手动安装OpenSSL1.1.1
  • 【深度解析】YOLOE登场:CNN路线的开放世界新答卷,超越YOLO-World与Transformer
  • 去哪儿旅行 Bella Pre 分析
  • (003)Excel 在滚动的时候,保持标题栏可见
  • 论文阅读的三个步骤
  • nextcloud私有网盘系统搭建
  • 【AI提示词】第一性原理
  • Laravel基础
  • 基于PLC的图书管理识别系统设计
  • 修复典籍知识问答典籍管理界面典籍不能正确加载的问题
  • IAP远程升级入门讲解
  • 第十五章-PHP文件编程
  • Docker与Vmware网络模式的对别
  • softlockup_panic=1配置方法及区别