【问题标题】:Not able to mock constructor using PowerMock无法使用 PowerMock 模拟构造函数
【发布时间】:2017-08-23 12:50:40
【问题描述】:

在下面的代码中,我无法使用 PowerMock 模拟构造函数。 我想模拟下面的语句。

APSPPortletRequest wrappedRequest = new APSPPortletRequest(request);

以下是我的嘲讽步骤

@PrepareForTest({APSPPortletRequest.class})
@RunWith(PowerMockRunner.class)
public class ReminderPortletControllerTest {

   private PortletRequest requestMock;
   private APSPPortletRequest apspPortletRequestMock;

   public void setUp() throws Exception {
      requestMock = EasyMock.createNiceMock(PortletRequest.class);
      apspPortletRequestMock = EasyMock.createNiceMock(APSPPortletRequest.class);
   }

   @Test
   public void testExecuteMethod() throws Exception {

      PowerMock.expectNew(APSPPortletRequest.class, requestMock).andReturn(apspPortletRequestMock).anyTimes();

      EasyMock.replay(apspPortletRequestMock, requestMock);
      PowerMock.replayAll();
   }
}

请在这方面给我建议。

【问题讨论】:

  • 您能否提供错误信息,或者提供一些关于确切问题的提示

标签: junit powermock easymock


【解决方案1】:

因为你想模拟这一行

APSPPortletRequest wrappedRequest = new APSPPortletRequest(request);

这个对象创建调用只需要一个参数,但是在你的测试方法中进行模拟时,你将两个值传递给expectNew 方法。

其实你应该这样做

PowerMock.expectNew(APSPPortletRequest.class, EasyMock.anyObject(requestClass.class)).andReturn(apspPortletRequestMock).anyTimes();

通过这样做,您告诉编译器在使用请求类的任何对象作为参数的 APSPPortletRequest 类上调用“new”运算符时返回一个模拟实例 apspPortletRequestMock。

而且您还遗漏了一个小点,您也需要重播所有 Easymock 对象。即EasyMock.replay(...); 也需要存在。

希望这会有所帮助!

祝你好运!

【讨论】:

    【解决方案2】:

    如果你想模拟下面的方法:

    EncryptionHelper encryptionhelper = new EncryptionHelper("cep", true);

    你可以用 powerMock 用这种方式做到这一点。

    1.导入类。

    导入静态 org.powermock.api.support.membermodification.MemberMatcher.method;

    导入静态 org.powermock.api.support.membermodification.MemberModifier.stub;

    2.在您的junit测试类上方添加注释@RunWith和@PrepareForTest。

    @RunWith(PowerMockRunner.class)

    @PrepareForTest({ EncryptionHelper.class})

    3.模拟它。

    EncryptionHelper encryptionHelperMock = PowerMock.createMock(EncryptionHelper.class);

    PowerMock.expectNew(EncryptionHelper.class, isA(String.class), EasyMock.anyBoolean()).andReturn(encryptionHelperMock);

    4.回复

    PowerMock.replayAll(encryptionHelperMock);

    我按照上面的步骤做了,效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      相关资源
      最近更新 更多