JMockIt多期望底层原理:多次赋值result如何生效?
JMockIt多次赋值
result实现顺序返回的原理 Java确实不能重载=运算符,JMockIt能实现这个逻辑靠的是动态字节码增强+内部状态追踪,具体过程是这样的:
- Expectations初始化块的特殊处理:
new Expectations() {{ ... }}这种写法利用了Java的实例初始化块,JMockIt会在测试类加载阶段,通过字节码修改技术拦截这个块里的所有操作。 result不是普通变量:result是JMockIt框架提供的特殊字段,每次对它赋值时,框架并不会像普通变量那样覆盖旧值,而是把新值添加到一个和当前方法期望绑定的结果队列里。- 调用时的顺序匹配:当测试代码里调用
foo.nonVoidMethod()时,JMockIt会找到之前记录的对应方法期望,按顺序从结果队列里取出值返回,每调用一次就取下一个值,所以三次调用依次得到"a"、"b"、"c"。
简单来说,JMockIt把初始化块里的代码转换成了期望配置操作:先记录foo.nonVoidMethod()的调用期望,之后的多次result赋值就是给这个期望追加多个返回结果,调用时按顺序取用。
内容的提问来源于stack exchange,提问作者Dasmowenator
相关产品推荐
相关产品推荐

