Junit 使用Liferay 6.2进行单元测试

Junit 使用Liferay 6.2进行单元测试,junit,liferay,Junit,Liferay,我使用的是liferay-plugins-sdk-6.2,我已经使用servicebuilder创建了一个表“patients”以及相应的模型和服务。现在我正试图为我的逻辑创建一个JUnit测试。关于这一点,我已经查看了很多论坛帖子,因此对于6.2,我创建了以下结构:(顺便说一句:我正在使用ant) 这是给我带来麻烦的部分 @Test public void testValidatePatient() throws SystemException { Patient patient =

我使用的是liferay-plugins-sdk-6.2,我已经使用servicebuilder创建了一个表“patients”以及相应的模型和服务。现在我正试图为我的逻辑创建一个JUnit测试。关于这一点,我已经查看了很多论坛帖子,因此对于6.2,我创建了以下结构:(顺便说一句:我正在使用ant)

这是给我带来麻烦的部分

@Test
public void testValidatePatient() throws SystemException {
    Patient patient = new PatientImpl();
    ...
}
当我运行测试(从ant测试)时,我得到以下异常:

java.lang.ExceptionInInitializerError 
    PatientModelImpl.<clinit>(PatientModelImpl.java:92)
    ValidatorUtilTest.testValidatePatient(ValidatorUtilTest.java:29)
Caused by: java.lang.NullPointerException
    at com.liferay.portal.kernel.configuration.ConfigurationFactoryUtil.getConfiguration(ConfigurationFactoryUtil.java:27)
    at com.liferay.util.service.ServiceProps.<init>(ServiceProps.java:66)
    at com.liferay.util.service.ServiceProps.<clinit>(ServiceProps.java:70)
似乎ServiceProps无法正确实例化,因此(仅用于测试)我删除了ServiceProps.get调用并放置了相应的默认值。之后,我又进行了一次测试,一切都很顺利


所以我这里的问题是如何正确地配置东西,所以我将有一个配置?或者是否有其他不需要我修改Service Builder代码的解决方法?

看起来Spring上下文没有正确初始化

请尝试以下操作:

在测试类中,编写setup方法,该方法将调用“InitUtil.initWithSpring()”方法。 使用@test注释编写测试,特别是当它是关于单元测试时,您应该能够在不进行任何ServiceBuilder初始化的情况下进行测试。IMHO接触外部实体(如:数据库)的单元测试不是合适的单元测试。您应该能够将
Patient
接口的任何实现类传递到您的验证器中,以便它执行工作(您可能想要测试验证器,而不是测试Patient实现)

您不希望对servicebuilder的持久性进行单元测试,而是希望进行集成测试


因此:只需(TM)通过自动生成方法、getter和setter来创建一个
patientForestImpl
,或者使用一个常见的模拟库来动态执行此操作,并使用该对象来测试验证器。

我也遇到了同样的问题。我尝试了不同的场景和测试库

当我在项目中将PowerMockito作为测试框架时,我解决了我的问题

尝试将Mockito或PowerMockito配置为您的测试框架。
如果您的测试再次失败,您可以尝试按照Olaf Kock的建议使用包装类。

将您的测试文件夹放在docroot之外-docrootIt在docroot之外。文件夹test和docroot是兄弟。感谢您的回复,这听起来很合理。您是对的,我的目的是测试我的患者验证,我只是想获得一个患者对象,以便我可以n填写一些数据。
java.lang.ExceptionInInitializerError 
    PatientModelImpl.<clinit>(PatientModelImpl.java:92)
    ValidatorUtilTest.testValidatePatient(ValidatorUtilTest.java:29)
Caused by: java.lang.NullPointerException
    at com.liferay.portal.kernel.configuration.ConfigurationFactoryUtil.getConfiguration(ConfigurationFactoryUtil.java:27)
    at com.liferay.util.service.ServiceProps.<init>(ServiceProps.java:66)
    at com.liferay.util.service.ServiceProps.<clinit>(ServiceProps.java:70)
public static final boolean ENTITY_CACHE_ENABLED = GetterUtil.getBoolean(com.liferay.util.service.ServiceProps.get(
         "value.object.entity.cache.enabled.com.methodia.khearos.model.Patient"),
        true);