2013-10-08 2 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 테스트 - com.liferay.portal.kernel.bean.BeanLocatorException는 : BeanLocator는 TestCase의 확장 테스트 클래스 위에 나는 기본의 JUnit 4를 사용하고

내가 점점 오전 예외는 다음과 같습니다

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

다음 방법 customService.CreateCategory를(); 같은 CompanyLocalServiceUtil.getCompanyByWebId 같은 Lifery 폴더의 유틸리티 메소드 호출하고있다 등

사람이에 도움이 되거하시기 바랍니다. 나는 정말 어떤 도움을 주셔서 감사합니다.

내가 스프링 설정 파일을 Liferay DS 정보를 제공해야합니까? 또는

내가 데이터를 스텁 수있는 방법이 있나요?
는 내가있는 Liferay 엔티티 클래스 중 하나에 추가 작업을 테스트하려고 -

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 (새 문자열 [] { ""/applicationContext-Services.xml "}); \t}이 시도했지만 여전히 null null – Sri

+0

'* Util' 클래스 조롱하지 말고' * 서비스'및 CompanyLocalServiceUtil'에 그것을 삽입하십시오. – ragnor

+0

예, Util을 인스턴스화하여 null 포인터를 없애고 다음 조롱 * 서비스를 주입하지만, 나는 Liferay 엔터티 호출 (회사, 사용자, 그룹, 카테고리, 역할, 리소스, 사용 권한)을 단일 메서드로 테스트 할 수 있습니다. 사용자 지정 서비스 메서드를 테스트 할 확신이 없습니다. 좋은 생각이고 이런 식으로 조롱 할 가치가 있습니다. 모든 종속성 병을 주입하고, lifelay의 spring xml 파일을 삽입하려고 생각하고 있습니다. if 가능한, 그래서 모든을 Liferay 종속성을 초기화 할 수 쉽지 않을 것 – Sri