【问题标题】:grails 2.0.1 unit test NullPointerException on savegrails 2.0.1 单元测试 NullPointerException 保存
【发布时间】:2012-07-02 10:03:54
【问题描述】:

我在 grails 中进行单元测试时遇到了一个奇怪的问题,当我尝试保存一个模拟对象时,它会抛出一个 NullPointerException

 java.lang.NullPointerException
at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.persistEntity(NativeEntryEntityPersister.java:798)
at org.grails.datastore.mapping.engine.EntityPersister.persist(EntityPersister.java:130)
at org.grails.datastore.mapping.core.AbstractSession.persist(AbstractSession.java:477)
at org.grails.datastore.gorm.GormInstanceApi.doSave(GormInstanceApi.groovy:166)
at org.grails.datastore.gorm.GormInstanceApi$_save_closure4.doCall(GormInstanceApi.groovy:143)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:301)
at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:34)
at org.grails.datastore.gorm.GormInstanceApi.save(GormInstanceApi.groovy:142)
at it.rascio.ConverterServiceTests.testConvert(ConverterServiceTests.groovy:64)

我的测试是这样的:

@TestFor(ConverterService)
@TestMixin(GrailsUnitTestMixin)
@Mock([MyObj1, MyObj2, LittleObject])
class ConverterServiceTests{
   def littleObject;
   void setUp(){
         littleObject = new LittleObject(prop1: 'hello', prop2: 'world')
   }

   void testConvert(){
    MyObj1 obj = new MyObj1()
    obj.prop = 'my property'
    obj.littleObject = littleObject
    obj = obj.save(flush:true, failOnError: true)

    MyObj2 b = new MyObj2()
    b.obj1Id = obj.id;

    assert service.convert(b) == null;


}

当我调用 .save 方法时抛出异常。 我已经看到,如果我删除 littleObject 它会起作用。 有人可以知道这个异常是什么吗?

【问题讨论】:

    标签: unit-testing grails mocking grails-orm


    【解决方案1】:

    如果您的类MyObj1 包含一些其他类型的嵌入属性或有任何其他级联保存,您应该将这些类添加到@Mock 注释列表中。

    【讨论】:

    • 是的,就是这样,我在 Obj1 中还有另一个对象,但我也将它添加到模拟中,但没有任何成功...
    • 不,我嘲笑错了班级(我讨厌名字相似的班级!)非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多