Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在Grails应用程序中测试NullProject_Unit Testing_Grails_Groovy_Junit_Null - Fatal编程技术网

Unit testing 在Grails应用程序中测试NullProject

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

使用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.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中的问题。通过测试一个竹制版本,逻辑在部署时都能正常工作