2013-10-08 50 views
0
public class CustomServiceImplTest extends TestCase{ 

    ApplicationContext ac; 

    private BeanLocator mockBeanLocator; 

    @Test 
    public void testCreateCategory() throws Exception { 

     CustomService customService = (CustomService) ac.getBean("customService"); 
     customService.CreateCategory(); 
    } 

    @Before 
    public void setUp() 
    { 
     mockBeanLocator = Mockito.mock(BeanLocator.class); 
     PortalBeanLocatorUtil.setBeanLocator(mockBeanLocator); 
     CompanyLocalServiceUtil mockCompanyLocalService = Mockito.mock(CompanyLocalServiceUtil.class); 
     ac = CustomSpringUtils.loadApplicationContext(new String[] { ""/applicationContext-Services.xml" }); 
    } 
} 

我正在使用基本的JUnit 4并创建上面的测试类来扩展TestCase。Junit测试 - com.liferay.portal.kernel.bean.BeanLocatorException:BeanLocator尚未设置

我正的例外如下:

java.lang.NullPointerException at com.liferay.portal.service.CompanyLocalServiceUtil.getCompanyByWebId(CompanyLocalServiceUtil.java:498) 

以下方法customService.CreateCategory();已经调用了Lifery util方法,如CompanyLocalServiceUtil.getCompanyByWebId等。

请任何人都对此有所了解。我非常感谢任何帮助。

我是否需要在spring配置文件中提供Liferay DS信息?或

有没有什么办法可以将数据剔除?
我想在Liferay的实体类的一个测试ADD操作 -

MBCategoryLocalServiceUtil.addCategory(...) 
+0

您可以提供CompanyLocalServiceUtil的源代码吗?我找不到超过300行的任何源代码。干杯 –

+0

public static CompanyLocalService getService(){ if(_service == null){ _service =(CompanyLocalService)PortalBeanLocatorUtil.locate(CompanyLocalService.class.getName()); ReferenceRegistry.registerReference(CompanyLocalServiceUtil.class, “_service”); MethodCache.remove(CompanyLocalService.class); } return _service; } private static CompanyLocalService _service; //我没有提供setService方法,因为它是空间限制。 – Sri

回答

1

你必须CompanyLocalServiceUtil注入/模拟CompanyLocalService类。 Liferay的方法是:

CompanyLocalService service = ..... // mock; 
new CompanyLocalServiceUtil().setService(service); 

setService是一个实例方法,但是它赋值给静态字段。不要问我为什么这样实施和设计。

+0

mockBeanLocator = Mockito.mock(BeanLocator.class); PortalBeanLocatorUtil.setBeanLocator(mockBeanLocator); CompanyLocalService mockCompanyLocalService = Mockito.mock(CompanyLocalService.class); CompanyLocalServiceUtil mockCompanyLocalServiceUtil = Mockito.mock(CompanyLocalServiceUtil.class); mockCompanyLocalServiceUtil.setService(mockCompanyLocalService); ac = CustomSpringUtils.loadApplicationContext(new String [] {“”/applicationContext-Services.xml“}); \t}我试过但仍服务为空 – Sri

+0

不要模拟'* Util'类,只模拟' *服务'并注入'CompanyLocalServiceUtil'。 – ragnor

+0

是的,通过实例化* Util摆脱了空指针,然后注入了mocked * Service,但是我有很多Liferay实体调用(公司,用户,组,类别,角色,资源,权限)在一个单一的方法。我不知道要测试我的自定义服务方法,这是一个好主意,值得这样做,并嘲笑我正在考虑注入所有的依赖jar,spring xml文件liferay if可能的,所以我不需要嘲笑任何数据 – Sri