首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >模拟保护方法

模拟保护方法
EN

Stack Overflow用户
提问于 2011-11-29 22:15:29
回答 1查看 43.8K关注 0票数 16

我想模拟一个继承的受保护方法。我不能直接从java代码调用这个方法,因为它是从另一个包中的类继承而来的。我找不到一种方法来指定此方法以在when(...)中存根

代码语言:javascript
复制
package a;

public class A() {
    protected int m() {}
}

package b;

public class B extends a.A {
    // this class currently does not override m method from a.A
    public asd() {}
}

// test
package b;

class BTest {
    @Test
    public void testClass() {
        B instance = PowerMockito.spy(new B());
        PowerMockito.when(instance, <specify a method m>).thenReturn(123);
        //PowerMockito.when(instance.m()).thenReturn(123); -- obviously does not work
    }
}

我看过PowerMockito.when重写,这似乎都是私有方法的!

如何指定受保护的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-29 22:35:49

简而言之:不能总是使用when来截获间谍;请使用doReturn

假设静态导入spydoReturn (都是PowerMockito):

代码语言:javascript
复制
@RunWith(PowerMockRunner.class)
@PrepareForTest(B.class)
public class BTest {
    @Test public void testClass() throws Exception {
        B b = spy(new B());
        doReturn(42).when(b, "m");
        b.asd();
    }
}

您还可以在when(a, "m")@PrepareForTest(A.class)和设置doReturn。哪个更有意义取决于实际的测试。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8312212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档