2013-10-08 53 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