我们已经尝试将单元测试引入到我们当前的项目中,但它似乎没有起作用.额外的代码似乎已经成为一个维护问题,因为当我们的内部框架发生变化时,我们必须绕过并修复任何挂起它的单元测试.
我们有一个抽象基类,用于单元测试我们的控制器,它作为模板调用子类的抽象方法实现,即Framework调用Initialize,所以我们的控制器类都有自己的Initialize方法.
我曾经是单元测试的倡导者,但它似乎并不适用于我们当前的项目.
任何人都可以帮助确定问题以及我们如何使单元测试对我们而不是对我们有效?
如何管理用于测试的虚拟数据?将它们与各自的实体保持一致?在一个单独的测试项目中?使用外部资源的Serializer加载它们?或者只是在需要的地方重新创建它们?
我们有一个应用程序堆栈,其中包含多个模块,具体取决于另一个模块.每个模块都有自己的测试,需要运行虚拟数据.
现在,具有大量依赖性的模块将需要来自其他模块的大量虚拟数据.然而,那些不发布它们的虚拟对象,因为它们是测试资源的一部分,因此所有模块必须一次又一次地设置它们需要的所有虚拟对象.
另外:我们实体中的大多数字段都不可为空,因此即使针对对象层运行事务也要求它们包含一些值,大多数情况下还有其他限制,如唯一性,长度等.
是否有最佳实践方法或所有解决方案都妥协?
更多详情
我们的堆栈看起来像这样:
一个模块:
src/main/java --> gets jared (.../entities/*.java contains the entities)
src/main/resources --> gets jared
src/test/java --> contains dummy object setup, will NOT get jared
src/test/resources --> not jared
Run Code Online (Sandbox Code Playgroud)
我们使用Maven来处理依赖关系.
模块示例:
选项a)
测试模块T可以容纳所有虚拟对象,并将它们提供给所有模块中的所有测试中的测试范围(因此加载的依赖关系不会受到影响).那会有用吗?含义:如果我加载牛逼的一个并运行安装在一个将它不含有引入引用牛逼特别是没有B?然而A会知道B的数据模型.
选项b)
模块A在某处提供虚拟对象,src/main/java../entities/dummy允许B获取它们,而A不知道B的虚拟数据
选项c)
每个模块都包含外部资源,它们是序列化的虚拟对象.它们可以由需要它们的测试环境反序列化,因为它依赖于它们所属的模块.这将需要每个模块创建和序列化其虚拟对象,以及如何做到这一点?如果使用另一个单元测试,它会引入不应该发生的单元测试之间的依赖关系,或者使用脚本,它将很难调试而且不灵活.
选项d)
使用模拟框架并根据需要手动为每个测试分配必需的字段.这里的问题是我们实体中的大多数字段都不可为空,因此需要调用setter或构造函数,这将使我们在开始时再次结束.
我们不想要的
我们不希望使用静态数据设置静态数据库,因为所需对象的结构将不断变化.很多,现在,稍晚一点.所以我们希望hibernate设置所有表和列,并在单元测试时填充数据.静态数据库也会引入许多潜在错误并测试相互依赖性.
我的想法是否朝着正确的方向发展?处理需要大量数据的测试的最佳做法是什么?我们将有几个相互依赖的模块,它们需要填充来自其他几个模块的某种数据的对象.
编辑
关于我们现在如何回应第二个答案的更多信息:
所以为了简单起见,我们有三个模块:Person, …