Junit test - com.liferay.portal.kernel.bean.BeanLocatorException:BeanLocator尚未设置

时间:2013-10-08 19:34:36

标签: java spring junit liferay

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的测试类。

我得到的例外如下:

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

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

请有人对此有所了解。我真的很感激任何帮助。

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

有什么方法可以存根数据吗?
我试图在其中一个Liferay实体类上测试ADD操作 -

MBCategoryLocalServiceUtil.addCategory(...)

1 个答案:

答案 0 :(得分:1)

您必须在CompanyLocalService中注入/模拟CompanyLocalServiceUtil课程。 Liferay的做法是:

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

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