考虑以下模型: 如果我想要一个纯粹的C实例,我会执行。
如果我想要它被持久化,我会执行。
如果我想要一个已知B的C实例,我会执行。
我的问题是,如果我想要持久化一个C,它应该持久化它的B吗?还是应该事先持久化?如果我想要一个合理的默认B怎么办?如果我想要持久化D,它应该持久化所有A、B、C吗?
当然,实际系统要复杂得多(有时还存在循环引用)。我正在寻找持久化复杂测试数据的最佳实践。
编辑:看起来我遇到了语言障碍,我的母语不是英语,所以对于不清楚的地方我很抱歉。这里有更多信息:
- 我试图编写覆盖率测试,而不是单元测试(因此我不会模拟任何内容)。 - 我尝试测试的软件片段在数据库被填充到一定程度时可以工作(它不使用所有实体)。
附言:请随时索取更多信息,因为我一直在努力寻找可能的最佳实践。我想到的最接近的方法是:
- 在构建实体时跟踪已经显式设置的内容。
- 假设已经显式设置的实体已经持久化,不要再次持久化。
- 将其他所有内容(使用它们自己的持久化器)持久化。
这个方法可以工作,但我的直觉告诉我,我正在做错什么,因为测试代码中会涉及逻辑,如果没有测试,处理起来将非常复杂。
编辑2:我将尝试让自己更清楚。当我编写/运行单元测试和一些集成测试时,我没有问题,因为测试数据没有持久化,它存在于内存中。
但是,当我尝试持久化我的测试数据时,Hibernate 不允许我保存一个没有关联的实体。
我该如何解决这个问题?