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

PowerMockito模拟单个静态方法并在另一个静态方法中返回对象

殳自怡
2023-03-14
public static byte[] encrypt(File file, byte[] publicKey, boolean verify) throws Exception {
        //some logic here
        PGPPublicKey encryptionKey = OpenPgpUtility.readPublicKey(new ByteArrayInputStream(publicKey));
        //some other logic here
}

public/private static PGPPublicKey readPublicKey(InputStream in) throws IOException, PGPException {
 //Impl of this method is here
}

我的测试用例是:

@Test
    public void testEncrypt() throws Exception {
        File mockFile = Mockito.mock(File.class);
        byte[] publicKey = { 'Z', 'G', 'V', 'j', 'b', '2', 'R', 'l', 'Z', 'F', 'B', 'L', 'Z', 'X', 'k', '=' };
        boolean flag = false;

        PGPPublicKey mockPGPPublicKey = Mockito.mock(PGPPublicKey.class);
        InputStream mockInputStream = Mockito.mock(InputStream.class);

        PowerMockito.mockStatic(OpenPgpUtility.class);

        PowerMockito.when(OpenPgpUtility.readPublicKey(mockInputStream)).thenReturn(mockPGPPublicKey);

        System.out.println("Hashcode for PGPPublicKey: " + OpenPgpUtility.readPublicKey(mockInputStream));
        System.out.println("Hashcode for Encrypt: " + OpenPgpUtility.encrypt(mockFile, publicKey, flag));
    }

当我调用openpgputility.encrypt(mockFile,publicKey,flag)时,实际上不会调用此方法。如何在sideencrypt(...)中模拟ReadPublicKey(...)方法的结果?

共有1个答案

强承望
2023-03-14

我在某人的帖子中找到了SOF的解决方案。

在我的例子中,我使用了与下面相同的PowerMockito部分模拟。

powermockito.stub(powermockito.method(openpgputility.class,“readpublickey”,inputstream.class)).toreturn(mockPGPPublicKey);

 类似资料:
  • 我想从一个包含两个静态方法m1和M2的类中模拟一个静态方法m1。并且我希望方法m1返回一个对象。 我尝试了以下操作 2)但在执行m1时不调用它。

  • 问题内容: 我想从包含2个静态方法m1和m2的类中模拟静态方法m1。我希望方法m1返回一个对象。 我尝试了以下 1) 这将同时调用m1和m2,它们具有不同的返回类型,因此会给出返回类型不匹配错误。 2) 但是,执行m1时不会调用此方法。 3) 给出了我不能从http://code.google.com/p/powermock/wiki/MockitoUsage获得的,无法提供模拟部分的编译器错误。

  • 下面的事情我需要帮助, 我必须使用PowerMock/Mockito为一个方法编写一个JUnit,该方法调用外部jar中存在的最终类的静态方法。 我需要为其编写JUnit测试的方法是: 在上面的代码中是一个最终类,是中的静态方法。 我已经尝试编写如下所示的测试,但调试时节对象(节)显示为null。可能调用的是实际的代码(),而不是模拟。 请帮助我使用powermockito/mockito编写Ju

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 编辑: 感谢所有的回复。我找到了解决办法。我试图模拟一个方法findById,它不是直接在User.class中,而是在用户扩展的genericModel.class中。现在一切都很完美。