为嵌套对象生成unit testing用例的测试数据

在为任何企业级java服务编写unit testing用例的模拟依赖服务时,我发现为unit testing用例设置数据非常痛苦。 大多数情况下,这是开发人员不编写unit testing用例而非编写集成样式测试用例的最有说服力的理由。 如果服务依赖于其他几个服务(取决于它们各自的DAO)和它自己的DAO, when-thenReturn为一个合理嵌套的对象生成when-thenReturn子句变得相当费力,并且开发人员被认为采取了简单的方法并加载整个spring上下文并从直接源获取数据,这些数据可能并不总是提供可遍历所有必需代码路径的数据。 在此背景下,我的一位同事建议,为什么不运行样本集成测试,并使用方面,捕获所有相关数据点并将其序列化为XML表示,该表示可用于实现unit testing的测试数据案例。 令我们惊喜的是,我们在github上找到了一个名为TestDataCaptureJ的框架,它与此非常相似。 它使用方面来捕获数据点,并生成java代码来创建对象。

网站上显示的动机似乎非常贴切,我想知道是否有任何其他替代品可以提供类似的function。 而且,如果专家可以批评这种整体方法,那将是很好的。

此外,该项目大约2岁,并有一些我们不得不修复的错误,并希望将其作为一个mavenized github fork回来。 只需检查以确保其中一个着名的马厩也没有其他类似的倡议。

提前致谢!

这种方法有两个批评 ……请记住,我对你的语境的了解几乎为零,这意味着我在这里建议的内容可能不适合你。

我曾经只遇到过你提到过的问题,这是一个症状,即对象之间的联系过多,因为责任是广泛的。 从那时起,我使用域驱动设计方法,我没有再遇到这个问题。

我更喜欢使用Test-Data Builders来创建测试数据。 这种方法允许我有一个我想要构建的模板,只需替换我对测试感兴趣的位。 如果您决定采用这种方式,我强烈建议您使用名为Make-It-Easy的小型库,以简化这些构建器的创建。

还有两个建议

如果你有时间,我建议你

  1. 观看迈克尔·费尔斯(Michael Feathers)的可测试性和优秀设计之间的深度协同作用的预设 – 部分讲话与你所经历的非常类似。
  2. 阅读“ 成长对象系统,测试指导 (又名GOOS)”一书,它提供了有关如何编写简单,令人惊叹,可测试代码的各种见解。