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

用PowerMock模拟私有方法

席言
2023-03-14

我正在尝试测试下一种方法:

public void methodToTest() {
    // Other stuff
    privateMethod(false).execute(new Void[0]);
}

称为PrivateMethod:

private AsyncTask<Void, Void, CustomObject> privateMethod(final boolean renew) {
    AsyncTask<Void, Void, CustomObject> asyncTask = new AsyncTask<Void, Void, CustomObject>() {

        @Override
        protected CustomObject doInBackground(Void... params) {
            CustomObject custom = new CustomObject();

            return custom;
        }
        protected void onPostExecute(CustomObject custom) {
            //some code
        }
    };

asyncTask的执行无法在Mockito的测试中完成,所以我需要以某种方式模拟它。我试着用PowerMock来嘲弄私有方法:

@Mock Context mockContext;
@Mock AsyncTask<Void, Void, CustomObject> mockAsyncTask;

@Test
public void methodTest() {
    ClassToTest objectToTest = new ClassToTest(mockContext);
    try {
        PowerMockito.doReturn(mockAsyncTask).when(objectToTest, "privateMethod", ArgumentMatchers.anyBoolean());
    objectToTest.methodToTest();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这在PowerMockito行(NullPointerException)中给了我一个异常,它说

方法引发了“org.mockito.exceptions.Misusing.UnfinishedStubbingException”异常。无法计算Android.os.AsyncTask$MockitoMock$1952591544.ToString()

现在我已经没有办法模仿这个物体了。

共有1个答案

权兴为
2023-03-14

我终于找到了答案:

@Test
public void methodTest() {
    ClassToTest objectToTest = PowerMockito.spy(new ClassToTest());
    try {
        when(objectToTest, method(ClassToTest.class, "privateMethod", boolean.class)).withArguments(false).thenReturn(mockAsyncTask);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

并且就在类声明之前:

@PrepareForTest(ClassToTest.class)
 类似资料:
  • 问题内容: 我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子: 我该如何对私有方法的结果进行存根测试以测试公共函数的 更多代码 部分。 问题答案: 通常,您只是不直接测试或嘲笑私有和受保护的方法。 您要测试的是您的类的 公共 API。其他所有内容都是您的类的实现细节,并且如果更改它,则不应“破坏”您的测试。 当您发现“无法获得100%的代码覆盖率”时,这也对您有所帮助,因为您

  • 我试图用Mockito/PowerMock模拟一个私有方法。我得到了NullPointerException ,我尝试做的简单示例是:

  • 我想为我拥有的一个类编写一个单元测试。这个类有一个公共方法,在公共方法内部有对同一个类中的私有方法的调用。我想模拟对那些私有方法的调用。类与此类似: 对于我的单元测试,我尝试将PowerMock与Mockito和TestNG一起使用。下面是我对测试SomePublicMethod的测试的尝试: 当我运行这个测试时,我会得到一个异常和一些提示: 我在网上看了一些例子,但是我还没有找到一个专门使用Po

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

  • 有没有可能的方法来模拟一个私人的最终场? 提前谢谢你们。