该测试失败并 partnermerge_test.go:22: datastore: invalid entity type
partnermerge_test.go:22: datastore: invalid entity type
package bigdipper import ( "testing" "appengine/aetest" "appengine/datastore" ) func TestCreateMigrationProposal(t *testing.T) { c, err := aetest.NewContext(nil) if err != nil { t.Fatal(err) } defer c.Close() if _, err := datastore.Put( c, datastore.NewKey(c, "ORDER", "order-id-1", 0, nil), datastore.PropertyList{}); err != nil { t.Fatal(err) } }
datastore.Put函数的文档说:
Put使用键k将实体src保存到数据存储中。src必须是结构指针或实现PropertyLoadSaver;如果是结构指针,则该结构的任何未导出字段都将被跳过。如果k是不完整的密钥,则返回的密钥将是由数据存储区生成的唯一密钥。
尝试将其与PropertyList一起使用时,这有些令人困惑src。PropertyList不实现PropertyLoadSaver,但* PropertyList实现。在PropertyList之前添加&以获得指向它的指针可修复此测试。
src
package bigdipper import ( "testing" "appengine/aetest" "appengine/datastore" ) func TestCreateMigrationProposal(t *testing.T) { c, err := aetest.NewContext(nil) if err != nil { t.Fatal(err) } defer c.Close() if _, err := datastore.Put( c, datastore.NewKey(c, "ORDER", "order-id-1", 0, nil), &datastore.PropertyList{}); err != nil { t.Fatal(err) } }