【发布时间】:2015-02-14 04:57:34
【问题描述】:
我正在对我的 datomic 代码编写一些测试。我创建了一个事务映射:
(def tx-map
{:db/id #db/id[:db.part/user -1000235]
:some-ns/my-attr {:db/id 17592186045421}}
交易很好。我查询我新添加的实体:
(def ent
"Query result."
{:db/id 17592186045425})
测试是否一切正常:
(= (:some-ns/my-attr tx-map) ; {:db/id 17592186045421}
(:some-ns/my-attr ent)) ; {:db/id 17592186045421}
=> false ; All is not well
原因是什么?
(type (:some-ns/my-attr tx-map)) => clojure.lang.PersistentArrayMap
(type (:some-ns/my-attr ent)) => datomic.query.EntityMap
如何正确测试 clojure PersistentArrayMap 和 datomic EntityMap 之间的相等性?
【问题讨论】:
-
有一些错误。在测试和类型检查中,
(:some-ns/my-attr ent)将返回 nil,因为ent是{:db/id 17592186045425}。 -
并交换type结果。
-
这段代码中有一些我不明白的地方,你应该准确地给出你的查询所得到的......;)
-
tx-map 是查询,为什么要比较查询和...?查询结果?不,它是硬编码的……查询结果在哪里?
-
一般来说,在比较 Clojure 对象和 Java 对象时,您不应该假设您可以测试相等性。有关详细信息,请参阅dev.clojure.org/jira/browse/CLJ-1036。