当前位置: 首页 > 知识库问答 >
问题:

PowerMockito正在调用实方法而不是模拟的私有方法

颜阳炎
2023-03-14

我有一个类,它有一个私有方法,并在其主体中调用另一个私有方法。所以我想调用第一个私有方法并模拟第二个。以下是一个例子:

public class ClassWithPrivateMethod {

    private int count;

    public ClassWithPrivateMethod() {
    }

    private void countDown() {
        while (isDecrementable())
            count--;
    }

    private boolean isDecrementable() {

        throw new IllegalArgumentException();
//        if (count > 0) return true;
//        return false;
    }
}

测试等级:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithPrivateMethodTest.class)
public class ClassWithPrivateMethodTest {

    private int count;
    private ClassWithPrivateMethod classWithPrivateMethod;

    @Before
    public void setUp() throws Exception {
        count = 3;
        classWithPrivateMethod = PowerMockito.spy(new ClassWithPrivateMethod());
    }

    @Test
    public void countDown() throws Exception {

        Whitebox.setInternalState(classWithPrivateMethod, "count", count);
        PowerMockito.doReturn(true, true, false).when(classWithPrivateMethod, "isDecrementable");

        Whitebox.invokeMethod(classWithPrivateMethod, "countDown");

        int count = Whitebox.getInternalState(classWithPrivateMethod, "count");

        assertEquals(1, count);

        PowerMockito.verifyPrivate(classWithPrivateMethod, times(3)).invoke("isDecrementable");
    }
}

我通过Whitebox调用了第一个私有方法。invokeMethod(classWithPrivateMethod,“倒计时”) 和模拟第二个,像这样,PowerMockito。doReturn(真、真、假)。当(classWithPrivateMethod,“IsDecremenable”) 。如您所见,isDecrementable方法在调用时应返回truetruefalse值,但PowerMockito正在调用real方法

我正在使用这些依赖项:

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-api-mockito</artifactId>
    <version>1.6.5</version>
</dependency>
<dependency>
    <groupId>org.powermock</groupId>
    <artifactId>powermock-module-junit4</artifactId>
    <version>1.6.5</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>1.10.19</version>
</dependency>

我的考试怎么了?


共有1个答案

弓俊晖
2023-03-14

我发现这行有错误:

@PrepareForTest(ClassWithPrivateMethodTest.class)

它应该是:

@PrepareForTest(ClassWithPrivateMethod.class)
 类似资料:
  • 我试图模拟一个私有方法(executeGetRequest),在我声明要为私有方法返回的模拟的那一行中,私有方法实际上是用null参数执行的,因此抛出了一个NullPointerException。 VlcPlayerMinimal。爪哇: VlcPlayerMinimalTest。爪哇: 堆栈跟踪: 它似乎PowerMockito实际上是调用的方法,我试图在行PowerMockito.do返回(

  • 有人能帮帮我吗?提前谢了。

  • 我试图在测试的类中模拟一个私有方法,如下所示。 现在我需要测试方法和mock。 我尝试创建间谍的上述类,但该方法得到调用时,我这样做下面 在第二行本身被调用。而且,不会被模仿。 也许我用错误的方式创建了间谍对象?无法执行

  • 我有一门课看起来像这样: 我想使用Mockito和Powermock为此编写一个单元测试。我知道我可以这样模仿私有方法: 但是我如何告诉它抛出异常呢?我知道会是这样的: 那里有什么? 请注意,异常是一个私有内部类,因此我不能只执行,因为从单元测试中无法访问。

  • 问题内容: 我正在尝试模拟私有静态方法。见下面的代码 这是我的测试代码 但是我运行的每个瓦片都会出现此异常 我想我在嘲弄东西时做错了什么。有什么想法我该如何解决? 问题答案: 为此,您可以使用和。 此外,您必须在测试类中指定PowerMock运行器,并准备要进行测试的类,如下所示: 希望对您有帮助。