【问题标题】:Mockito Liferay service testingMockito Liferay 服务测试
【发布时间】:2012-08-16 13:52:54
【问题描述】:

我尝试使用 PowerMock 测试由服务构建器生成的 LocalServiceUtil 类,但总是从 Util 的方法中获取“null”或“0”。

测试类

@RunWith(PowerMockRunner.class)
@PrepareForTest(EntityLocalServiceUtil.class)
public class EntityTest {

        @Test
        public void testGetAnswer() throws PortalException, SystemException {
                PowerMockito.mockStatic(EntityLocalServiceUtil.class);
                assertEquals("hello", EntityLocalServiceUtil.getHello());
        }
}

Util 类包含

public static java.lang.String getHello() {
            return getService().getHello();
}

并且此服务在已部署的 portlet 上正常工作。我做错了什么?

【问题讨论】:

  • 你应该提供 getService() 实现。

标签: testing junit liferay mockito


【解决方案1】:

你忘记模拟方法了:

    @Test
    public void testGetAnswer() throws PortalException, SystemException {
            PowerMockito.mockStatic(EntityLocalServiceUtil.class);
            when(EntityLocalServiceUtil.getHello()).thenReturn("hello"); // <- here
            assertEquals("hello", EntityLocalServiceUtil.getHello());
    }

【讨论】:

  • 好的,但是我们在哪里测试方法呢?在这种情况下,EntityLocalServiceUtil.getHello() 将始终返回“hello”,但不会调用 Util 和 Impl 类中的方法,对吗?
  • 是的。单元测试的目标是只测试你的单元代码,独立于其他类。因此,您需要从其他基础设施(如 Liferay 服务)中封装此代码。您可以使用模拟方法来做到这一点。
  • stackoverflow.com/questions/9701539/… 处查看使用 PowerMock 的方法。我们有一个独立的年龄计算方法,但是这个方法是从UserLocalServiceUtil中获取User的,所以Test我们封装了UserLocalServiceUtil的逻​​辑,只测试我们的年龄计算方法。
  • 但是如何直接使用 Util 类而没有测试类特殊的实现方法/字段?我发现只有一个解决方案 - 在服务器上部署 test-portlet 并使用 JUnitCore.runClasses(...) 运行 有没有像这个解决方案一样的解决方案,但要使用 ant 执行?
  • 如果您需要单元测试,那么您不需要将某些东西部署到服务器上。单元测试主要测试小程序逻辑,没有服务器和其他基础设施。您可能需要集成测试吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
相关资源
最近更新 更多