【问题标题】:Mocking DoNothing a private void method of a class - using PowerMockito模拟 DoNothing 类的私有 void 方法 - 使用 PowerMockito
【发布时间】:2020-10-17 03:30:55
【问题描述】:

公共方法 一个类正在被测试并且在公共方法内部它调用一个私有方法。我想在调用私有方法时忽略(doNothing)

 Myclass{

    public void someMethod( String some, File file, long age ,String name ){
        -----somecode----
        callprivateMethod(File file, long age, String name); //want to mock and Donothing
        -----somecode----
    }
}

已完成以下操作

@RunWith(PowerMockRunner.class)
@PrepareForTest({Ignorethisclass.class,MyClass.class})
MyClass iMyClass= Mockito.spy(new MyClass());

以下代码给出空指针异常:

[0]org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:65) StackTraceElement

doNothing().when(iMyClass, PowerMockito.method(MyClass.class, "callprivateMethod")).withArguments(Mockito.any(File.class),Mockito.any(long.class),Mockito.any(String.class));

我也试过这个,因为我在某个地方读到这样做 下面的代码给出了一个空指针异常

doNothing().when(iMyClass, "callprivateMethod", Mockito.any(File.class),Mockito.any(Long.class),Mockito.any(String.class));

非常感谢任何帮助

【问题讨论】:

  • 也试过这个:'PowerMockito.doNothing().when(MyClass, PowerMockito.method(MyClass.class, "callprivateMethod",File.class,long.class,String.class)).withArguments (Mockito.any(File.class),Mockito.any(long.class),Mockito.any(String.class));' '[0] org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:65) StackTraceElement'

标签: java methods mocking mockito powermockito


【解决方案1】:

您需要使用 powermock 模拟“MyClass”:

MyClass iMyClass = PowerMockito.spy(new MyClass());

完整示例:

//MyClass.java
import java.io.File;

public class MyClass {
    private void callprivateMethod(File file, long age, String name){
        throw new RuntimeException("avoid!");
    }

    public void someMethod(String some, File file, long age , String name ){
        System.out.println("-----somecode----");
        callprivateMethod(file, age, name);
        System.out.println("-----somecode----");
    }

}


//MyClassTest.java
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import java.io.File;

import static org.mockito.ArgumentMatchers.any;
import static org.powermock.api.mockito.PowerMockito.doNothing;

@RunWith(PowerMockRunner.class)
@PrepareForTest({MyClass.class})
public class MyClassTest {
    @Test
    public void someMethod() throws Exception {
        MyClass iMyClass = PowerMockito.spy(new MyClass());
        doNothing().when(iMyClass, "callprivateMethod", any(File.class), any(Long.class), any(String.class));
        iMyClass.someMethod("some", new File(""),22,"name");
    }
}

将输出:

-----somecode----
-----somecode----

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 2015-03-23
    • 2018-11-29
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多