java - 如何模拟父类的 protected 方法?

标签 java mockito

我尝试模拟父类的 protected 方法。出于这个原因,我使用 MockitoPowerMockito。我的父类。

public class Parent {
    protected int foo() {
        throw new RuntimeException("Do not invoke this method.");
    }
}

我的 child 类(class)。

public class Child extends Parent {
    protected int boo() {
        return super.foo();
    }
}

和测试类。

@RunWith(PowerMockRunner.class)
@PrepareForTest({Parent.class, Child.class})
public class ChildTest {

    @Mock
    private Child childMock;

    @Before
    public void before() {
        initMocks(childMock);
    }

    @Test
    public void shouldInvokeProtectedMockedMethod() throws Exception {
        /* Given */
        PowerMockito.doReturn(500).when(childMock, "foo");
        /* When */
        childMock.boo();
        /* Then */
        Mockito.verify(childMock, Mockito.times(1)).boo();
        Mockito.verify(childMock, Mockito.times(1)).foo();
    }

    @After
    public void after() {
        Mockito.reset(childMock);
    }
}

当我运行它时出现这个错误

Wanted but not invoked:
child.foo();
-> at com.test.ChildTest.shouldInvokeProtectedMockedMethod(ChildTest.java:36)

However, there were other interactions with this mock:
child.boo();
-> at com.test.ChildTest.shouldInvokeProtectedMockedMethod(ChildTest.java:33)

我做错了什么?

最佳答案

如果你想检查 foo() 方法是否真的被调用,你既不需要 Mockito,也不需要 PowerMockito。

捕获运行时异常会通知您已调用 foo() 方法。

package foo.bar;

import org.junit.Test;

public class ChildTest {

    /**
     * child.boo() calls super.foo(), then throws a RuntimeException.
     */
    @Test(expected = RuntimeException.class)
    public void shouldInvokeProtectedMethod() {
        Child child = new Child();
        child.boo();
    }
}

关于java - 如何模拟父类的 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30362790/

相关文章:

java - 如何使用 Spring WebClient 进行同步调用?

java - 如何让非主键列自动递增

Java TelnetClient 输入流打开后关闭

java - 如何对有两个公共(public)方法,一个调用另一个的情况进行单元测试?

java - 使用mockito模拟具有通用返回类型的方法

java - 验证重载方法调用

java - 使用 Mockito 在 Java 中模拟谓词

java - 无法解析配置 ':pushwoosh-react-native-plugin:classpath' 的所有 Artifact

java - 协作(CRC卡)

java - 如何在包含本地 Set<String> 变量的方法中进行单元测试?使用 powerMock 或 Mockito