Unit testing 在Grails应用程序中测试NullProject
使用Grails2.2.1,并且服务方法存在问题,该服务方法采用NullObject而不是null 单元测试失败,出现以下异常:Unit testing 在Grails应用程序中测试NullProject,unit-testing,grails,groovy,junit,null,Unit Testing,Grails,Groovy,Junit,Null,使用Grails2.2.1,并且服务方法存在问题,该服务方法采用NullObject而不是null 单元测试失败,出现以下异常: | java.lang.NullPointerException: Cannot get property 'class' on null object at grails.test.GrailsMock$_createMock_closure1_closure2.doCall(GrailsMock.groovy:105) at grails.test.Grails
| java.lang.NullPointerException: Cannot get property 'class' on null object
at grails.test.GrailsMock$_createMock_closure1_closure2.doCall(GrailsMock.groovy:105)
at grails.test.GrailsMock$_createMock_closure1.doCall(GrailsMock.groovy:103)
cacheService单元测试如下:
@Test
public void shouldCacheForCacheTypeJbossNullableObject() {
grailsApplication.config.domain.cache = "jbosscache"
cacheService.jbossCacheService = jbossMock.createMock()
cacheService.cacheWithNullable( at, ct, key, null )
jbossMock.verify()
}
缓存服务如下所示
@Override
void cacheWithNullable(Token token, String type, String key, Object value)
{
if(!value)
{
jbossCacheService.cache(token, type, key, new NullObject())
}
}
请注意:为了清晰起见,部分逻辑已被删除
jbossCacheService测试用例具有100%的测试覆盖率,并按预期运行,以确保不会将空值应用于缓存。但是,使用NPE时cacheService测试失败,我无法获得此方法测试,以便模拟返回服务或应用需求
感谢您的帮助 看起来NullObject是一个无类的类!因此,在GrailsMock.class中,第105行的以下代码将失败
if (it != null) {
if (it.class instanceof Class) {
这意味着null项目将通过null检查,但在instanceof上失败。因此,单元测试永远不会通过这种逻辑。可能会用Grails打开JIRA以获得更好的解释。为什么直接调用NullObject?因为缓存不能处理/操作NullObject,但它可以处理NullObject。jbossCacheService类按预期工作,但它是调用jbossCacheService的cacheService,这是JUnit中的问题。通过测试一个竹制版本,逻辑在部署时都能正常工作