【问题标题】:Mocking static Liferay method模拟静态 Liferay 方法
【发布时间】:2015-02-13 13:40:09
【问题描述】:

我正在尝试像这样模拟 PortalUtil.getPortal() 方法

PowerMock.mockStatic(PortalUtil.class);
Portal mockPortal = Mockito.mock(Portal.class);
Mockito.when(PortalUtil.getPortal()).thenReturn(mockPortal);

我收到以下错误

org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
It is a limitation of the mock engine.

我知道 Mockito 不能模拟静态方法,但我也在使用 PowerMock,它应该可以实现这一点。我也尝试使用PowerMockito.mockStatic() 而不是PowerMock.mockStatic()

我在班级级别有以下注释

@RunWith(PowerMockRunner.class)
@PrepareForTest(PortalUtil.class)

我错过了什么?

【问题讨论】:

  • 我认为@PrepareForTest 应该将您正在测试的类的名称(例如MyBusinessLogicTest.class)作为参数,而不是您要替换的类(PortalUtil.class)。
  • 还是不行。不过谢谢
  • Portal mockPortal = Mockito.mock(Portal.class);新 PortalUtil().setPortal(mockPortal); ^ 这有效
  • 好的。否则Mockito.when(PortalUtil.getPortal()) 需要使用PowerMock 而不是Mockito。 Powermock 可以模拟静态方法调用,Mockito 不能。
  • @steven35 你的问题现在解决了吗?如果是这样,请自行提供答案或删除问题。

标签: java unit-testing liferay mockito powermock


【解决方案1】:

使用这段代码后,我不再获得 NPE

Portal mockPortal = Mockito.mock(Portal.class);
new PortalUtil().setPortal(mockPortal);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多