Android Studio中Mockito Spy/Mock失效:方法返回值未按预期修改
问题分析与解决方案
嘿,我一眼就瞅出问题所在啦!你虽然创建了Mock对象spyA并设置了aaa()返回10,但根本没把这个Mock对象传给B类实例——你传给B的是全新的真实A类对象AA,那B调用的肯定是真实的aaa()方法,返回1就不奇怪咯。
核心问题点
你这段代码里的关键错误:
- 你创建了Mock对象
spyA,但它和你传给B的AA是完全两个独立的对象 - B类实例依赖的是真实的
AA,自然不会用到你配置好的Mock对象
修正后的代码示例
这里给你两种正确的写法,不管用Mock还是Spy都能生效:
方式1:使用Mock对象
class A { public int aaa() { return 1; } } class B { A classA; B(A classA) { this.classA = classA; } public int getAAA() { return classA.aaa(); } } // 创建A的Mock对象并配置返回值 A mockA = Mockito.mock(A.class); Mockito.when(mockA.aaa()).thenReturn(10); // 把Mock对象传给B,而不是新的A实例 int res = new B(mockA).getAAA(); Logxx.d("RESULT: " + res); // 现在会输出RESULT: 10
方式2:使用Spy对象(如果需要保留A类的部分真实逻辑)
如果你想保留A类的其他真实方法,只修改aaa()的返回值,可以用Spy:
class A { public int aaa() { return 1; } } class B { A classA; B(A classA) { this.classA = classA; } public int getAAA() { return classA.aaa(); } } // 创建A的Spy对象 A spyA = Mockito.spy(new A()); // 配置Spy的aaa()方法返回10 Mockito.when(spyA.aaa()).thenReturn(10); // 把Spy对象传给B int res = new B(spyA).getAAA(); Logxx.d("RESULT: " + res); // 同样会输出RESULT: 10
关键提醒
使用Mockito时,一定要确保被测试类依赖的是你配置好的Mock/Spy对象,而不是全新的真实实例——不然你的Mock配置完全不会生效哦!
内容的提问来源于stack exchange,提问作者Bazinga
相关产品推荐
相关产品推荐

