2009-10-06 64 views
1

我有一个简单的hibernate映射文件,使用自定义值类型的其中一个字段。自定义值类型包含一些相当复杂的业务逻辑。我希望能够在没有自定义值类型的逻辑的情况下对我的对象持久性进行单元测试。有什么办法来模拟自定义值类型吗?嘲笑休眠自定义值类型

我看到过类似的问题,其中接受的解决方案是增强自定义值类型以接受注入的“策略”。我不是特别喜欢为了迎合单元测试而增强我的课程的想法,所以我宁愿在可能的情况下进行模拟。

感谢任何人的任何帮助!

回答

1

我不是很清楚你打算测试什么?

如果你实际上想要坚持你的实体,你将无法嘲笑Hibernate的自定义类型 - 至少不是以“模拟”为常识的常识;所有UserType方法必须返回有意义的东西。这是“注入策略”解决方案的主要原因 - 以任何其他方式执行此操作可能会导致更多的工作:-)

现在,您肯定可以编写极其简单的UserType实现,并将其替换为您的原始类型配置,但我不确定这是如何工作的实际持久性 - 大概是“复杂的逻辑”是有原因的,并试图解决它可能会导致数据库级错误。如果情况并非如此,那么也许该逻辑在自定义类型中没有位置,而是属于服务(业务)层的某个位置。

+0

感谢您的回答。只是为了澄清,我有自定义值类型,进行服务调用,以便将java字段映射到一个/多个数据库字段。如果你在java对象中有一个邮政编码字段,并且想要将其映射到数据库表中的街道,城镇和州字段,那么我将从空气中摘取一个示例。可以使用自定义值类型来调用某些邮政编码查询服务。如果我现在想单元测试java对象的持久性,我想避免碰到邮政编码服务,所以希望能够'模拟'自定义值类型。希望这是有道理的! – fivemile

+0

感谢您的澄清。我认为像这样的东西最好在持久层之上完成,说实话。不过,在这种情况下,似乎你会嘲笑邮政编码服务,而不是你的自定义类型。我不确定你是注入它还是使用某种服务定位器,但不管怎样,用模拟代替实际的实现应该是相当直接的。 – ChssPly76