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

使用Mockito/PowerMock框架模拟最终私有变量

司寇灵均
2023-03-14
public class MessageContainer {
  private final MessageChain[] messages;


  MessageContainer(final int numOfMessages, final MessageManagerImpl manager, final Object someOtherStuff) {
    messages = new MessageChain[numOfMessages]
    // do other stuff
  }

  public void foo(final int index) {
    // do something
    messages[index] = getActiveMessage();
  }
}
@Test
public void testFoo() {
  MessageContainer messageContainer = Mockito.mock(MessageContainer.class);
  Mockito.doCallRealMethod().when(messageContainer).foo(anyIndex);
}
    Whitebox.setInternalState(messageContainer, MessageChain[].class, PowerMockito.mock(MessageChain[].class));

有没有可能的方法来模拟一个私人的最终场?

提前谢谢你们。

共有1个答案

赵嘉悦
2023-03-14

根据您的编辑和注释,我想说嘲笑这个类并验证方法被调用就足够了。

如果它是第三方代码,则应该只依赖它的方法签名,该签名包括类的公共API。否则,您将测试与您无法控制的东西联系得太紧密。当他们决定使用集合而不是数组时,您会怎么做?

简单地写:

MessageContainer container = mock(MessageContainer.class);
//Your code here...
verify(container).foo(obj);
 类似资料:
  • } 当我做它将打印芒果,但它仍然在打印苹果。如果有人能帮助我只使用MOCKITO而不是PowerMock等。

  • 我正在尝试测试下一种方法: 称为PrivateMethod: asyncTask的执行无法在Mockito的测试中完成,所以我需要以某种方式模拟它。我试着用PowerMock来嘲弄私有方法: 这在PowerMockito行(NullPointerException)中给了我一个异常,它说 方法引发了“org.mockito.exceptions.Misusing.UnfinishedStubbin

  • 我正在将Powermock从我目前正在进行的项目中移除,因此我试图仅用Mockito(Mockito-Core-2.2.28)重写一些现有的unitary测试。 无法模拟/Spy类Com.ExternalPackagePath.ExternalClass Mockito无法模仿/监视,因为: 最终类 正如Mockito文档(https://github.com/Mockito/Mockito/wi

  • 问题内容: 我有这样的情况 到目前为止我一直在嘲笑 现在我得到一个读者 但是当我执行此行时,我得到null并且无法前进 请告诉我如何嘲笑这个。请注意,我无法更改我的主要代码,因此在我的情况下,Mockito文档中存在的解决方案无效 测试码 问题答案: 要使此工作正常进行,您需要使用Powermockito来拦截构造函数调用(新的InputStreamReader(…),新的BufferedRead

  • 问题内容: 我有以下要模拟的Logger,但要验证是否正在调用日志条目,而不是内容。 我想模拟用于LoggerFactory.getLogger()的任何类,但是我找不到如何做到这一点。到目前为止,这是我最终得到的结果: 我想知道: 我可以模拟静态模型以用于任何课程吗? 我只能似乎运行的,因此我似乎无法改变每个方法的特点。有没有解决的办法? 编辑结果: 我以为我已经尝试过了,但没有成功: 但是,谢