2012-08-16 86 views
0

我尝试使用PowerMock测试服务构建器生成的LocalServiceUtil类,但始终从Util的方法中获取'null'或'0'。Mockito Liferay服务测试

测试类

@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正常工作。我做错了什么?

+0

你应该提供的getService()实现。 – gontard 2012-08-16 14:49:25

回答

1

你已经忘记嘲笑梅索德:

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

好的,但我们在哪里测试方法?在这种情况下,EntityLocalServiceUtil.getHello()将始终返回“hello”,但来自Util和Impl类的方法不会被调用,是否正确? – dmitrievanthony 2012-08-16 14:24:06

+0

是的。单元测试的目标是只测试你的单元代码,独立于其他类。因此,您需要从其他基础设施(如Liferay服务)封装此代码。你可以用模拟方法来做。 – Mark 2012-08-16 14:50:19

+0

请参阅PowerMock的方法在这里http://stackoverflow.com/questions/9701539/testing-for-custom-plugin-portlet-beanlocatorexception-and-transaction-roll-bac/11856097#11856097。在那里我们有一个计算年龄的独立方法,但是这个方法从UserLocalServiceUtil获得User,因此对于Test我们封装了UserLocalServiceUtil的逻​​辑并且只测试我们的年龄计算方法。 – Mark 2012-08-16 14:55:12