我们正在使用构建器模式来生成测试数据。这些领域对象之间有关系。我们的功能测试要求这些对象被持久化。
想想这个模型:
如果我想要一个普通的 CI 实例aNew().c().build()
如果我想让它坚持下去,我会aNew().c().saveIn(session)
如果我想要一个具有已知 BI 的 C 实例aNew().c().with(b).build()
嗯,你明白了。我的问题是,如果我想坚持一个C,它应该坚持它是B吗?还是应该事先坚持?如果我想要一个合理的默认 B 怎么办?如果我想坚持 D 怎么办?它应该坚持所有A,B,C吗?
当然,真实系统要复杂得多(有时带有循环引用)。我正在寻找持久化复杂测试数据的最佳实践。
编辑:看来我遇到了语言障碍,我的母语不是英语,所以我很抱歉晦涩难懂。以下是更多信息:
- 我要测试的不是遗留代码
- 我正在尝试编写覆盖测试,而不是单元测试(因此我不会嘲笑任何东西)
- 如果数据库被填充到一定程度(它不使用所有实体),我试图测试的软件就可以工作。
PS。请不要犹豫,询问更多信息,因为我一直在努力寻找可能的最佳实践。我想出的最接近的事情是:
- 在构建实体时跟踪明确设置的内容。
- 假设显式设置的实体已经被持久化,不要持久化它们。
- 坚持其他一切(使用他们自己的坚持者)。
这会起作用,但是我的蜘蛛感觉很刺痛,我认为我做错了什么,因为测试代码中会涉及到逻辑,如果没有测试,处理起来会非常复杂。
编辑2:我会尽量让自己更清楚。当我编写/运行我的单元和一些集成测试时,我没有问题,因为测试数据没有持久化,它存在于内存中。
但是当我尝试持久化我的测试数据时,休眠不会让我保存没有关系的实体。
我该如何克服这个问题?