测试自定义插件portlet:BeanLocatorException和事务回滚以进行服务测试

测试自定义插件portlet:BeanLocatorException和事务回滚以进行服务测试,第1张

测试自定义插件portlet:BeanLocatorException和事务回滚以进行服务测试

我用于JUnit测试

PortalBeanLocatorUtil.setBeanLocator(...)
Mockito 框架,并通过-methode
注入服务。我认为这显然是通过d簧配置来实现的。在这里,您有完整的示例如何使用它。这个例子很简单,所以很好,因为这种方法简单易懂。

package mst.unittest.example;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.junit.Before;import org.junit.Test;import com.liferay.portal.kernel.bean.BeanLocator;import com.liferay.portal.kernel.bean.PortalBeanLocatorUtil;import com.liferay.portal.kernel.exception.PortalException;import com.liferay.portal.kernel.exception.SystemException;import com.liferay.portal.model.User;import com.liferay.portal.service.UserLocalService;import com.liferay.portal.service.UserLocalServiceUtil;import static org.junit.Assert.*;import static org.mockito.Mockito.*;public class MyUserUtilTest {    private BeanLocator mockBeanLocator;    @Before    public void init()  {        //create mock for BeanLocator, BeanLocator is responsible for loading of Services        mockBeanLocator = mock(BeanLocator.class);        //... and insert it in Liferay loading infrastructure (instead of Spring configuration)        PortalBeanLocatorUtil.setBeanLocator(mockBeanLocator);    }    @Test    public void testIsUserFullAge() throws PortalException, SystemException, ParseException {        //setup        SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd");        Date D2000_01_01 = format.parse("2000_01_01");        Date D1990_06_30 = format.parse("1990_06_30");        UserLocalService mockUserLocalService = mock(UserLocalService.class);        User mockUserThatIsFullAge = mock(User.class);        when(mockUserThatIsFullAge.getBirthday()).thenReturn(D1990_06_30);        User mockUserThatIsNotFullAge = mock(User.class);        when(mockUserThatIsNotFullAge.getBirthday()).thenReturn(D2000_01_01);        //overwrite getUser(...) methode so that wir get mock user-object with mocked behavior        when(mockUserLocalService.getUser(1234567)).thenReturn(mockUserThatIsFullAge);        when(mockUserLocalService.getUser(7654321)).thenReturn(mockUserThatIsNotFullAge);        //load our mock-object instead of default UserLocalService        when(mockBeanLocator.locate("com.liferay.portal.service.UserLocalService")).thenReturn(mockUserLocalService);        //run        User userFullAge = UserLocalServiceUtil.getUser(1234567);        boolean fullAge = MyUserUtil.isUserFullAge(userFullAge);        //verify        assertTrue(fullAge);        //run        User userNotFullAge = UserLocalServiceUtil.getUser(7654321);        boolean notfullAge = MyUserUtil.isUserFullAge(userNotFullAge);        //verify        assertFalse(notfullAge);    }}class MyUserUtil {    public static boolean isUserFullAge(User user) throws PortalException, SystemException {        Date birthday = user.getBirthday();        long years = (System.currentTimeMillis() - birthday.getTime()) / ((long)365*24*60*60*1000);        return years > 18;    }}

您也可以在没有Mockito框架的情况下使用这种方法,然后必须像

MockBeanLocator
手动创建模拟类。

使用PowerMock的方法

使用PowerMock可以退位,

BeanLocator
因为PowerMock允许覆盖静态方法。这是PowerMock的相同示例

package mst.unittest.example;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.junit.Test;import org.junit.runner.RunWith;import org.powermock.api.mockito.PowerMockito;import org.powermock.core.classloader.annotations.PrepareForTest;import org.powermock.modules.junit4.PowerMockRunner;import com.liferay.portal.kernel.exception.PortalException;import com.liferay.portal.kernel.exception.SystemException;import com.liferay.portal.model.User;import com.liferay.portal.service.UserLocalServiceUtil;import static org.junit.Assert.*;import static org.mockito.Mockito.*;@RunWith(PowerMockRunner.class)@PrepareForTest(UserLocalServiceUtil.class)public class LiferayAndPowerMockTest {    @Test    public void testIsUserFullAge() throws PortalException, SystemException, ParseException {        //setup        SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd");        Date D2000_01_01 = format.parse("2000_01_01");        Date D1990_06_30 = format.parse("1990_06_30");        User mockUserThatIsFullAge = mock(User.class);        when(mockUserThatIsFullAge.getBirthday()).thenReturn(D1990_06_30);        User mockUserThatIsNotFullAge = mock(User.class);        when(mockUserThatIsNotFullAge.getBirthday()).thenReturn(D2000_01_01);        //overwrite getUser(...) by UserLocalServiceUtil  methode so that wir get mock user-object with mocked behavior        PowerMockito.mockStatic(UserLocalServiceUtil.class);        when(UserLocalServiceUtil.getUser(1234567)).thenReturn(mockUserThatIsFullAge);        when(UserLocalServiceUtil.getUser(7654321)).thenReturn(mockUserThatIsNotFullAge);        //run        boolean fullAge = MySecUserUtil.isUserFullAge(1234567);        //verify        assertTrue(fullAge);        //run        boolean notfullAge = MySecUserUtil.isUserFullAge(7654321);        //verify        assertFalse(notfullAge);    }}class MySecUserUtil {    public static boolean isUserFullAge(long userId) throws PortalException, SystemException {        User user = UserLocalServiceUtil.getUser(userId);        Date birthday = user.getBirthday();        long years = (System.currentTimeMillis() - birthday.getTime()) / ((long)365*24*60*60*1000);        return years > 18;    }}

在这里,您发现了带有Mockito和JUnit的PowerMock
1.4.12,其中包括依赖项http://pre.google.com/p/powermock/downloads/detail?name=powermock-
mockito-
junit-1.4.12.zip&can=2&q=



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存