【问题标题】:I can't mock static method using Mockito and PowerMockito我无法使用 Mockito 和 PowerMockito 模拟静态方法
【发布时间】:2018-09-05 00:59:10
【问题描述】:

我在模拟第三方库中的静态方法时遇到问题。运行测试时,我不断收到空指针异常,但我不确定这是为什么。

这是调用静态方法的类和 void 方法,我试图模拟“MRClientFactory.createConsumer(props)”:

public class Dmaap {

    Properties props = new Properties();
    public Dmaap() {

    }

    public MRConsumerResponse createDmaapConsumer() {
        System.out.println("at least made it here");
        MRConsumerResponse mrConsumerResponse = null;
        try {
            MRConsumer mrConsumer = MRClientFactory.createConsumer(props);
            System.out.println("made it here.");
            mrConsumerResponse = mrConsumer.fetchWithReturnConsumerResponse();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace(); 
        }

        return mrConsumerResponse;      
    }
}

以下是不断返回空指针异常的测试。正在生成空指针的具体行是:MRClientFactory.createConsumer(Mockito.any(Properties.class));

@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "com.vismark.PowerMock.*")
public class DmaapTest {

    @Test
    public void testCreateDmaapConsumer() {
        try {
            Properties props = new Properties();
            PowerMockito.mockStatic(MRClientFactory.class);

            PowerMockito.doNothing().when(MRClientFactory.class);

            MRClientFactory.createConsumer(Mockito.any(Properties.class));

            //MRClientFactory.createConsumer(props);

            Dmaap serverMatchCtrl = new Dmaap();
            Dmaap serverMatchCtrlSpy = spy(serverMatchCtrl);

            serverMatchCtrlSpy.createDmaapConsumer();

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

【问题讨论】:

  • 您使用的是什么版本的 PowerMock + Mockito?当我尝试时,您的代码运行良好(PowerMock 1.7.3 和 Mockito 1.10.19)

标签: java junit mockito powermock


【解决方案1】:

请仔细阅读此示例:https://github.com/powermock/powermock/wiki/MockStatic

尤其是你缺少一个

@PrepareForTest(Dmaap.class)

…表示进行静态调用的类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多