为嵌套对象生成单元测试用例的测试数据

Kil*_*ahn 9 java mocking mockito

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

该网站上的动机似乎非常贴切,我想知道是否还有其他替代品可以提供相似的功能.而且,如果专家能够批评这种整体方法,那将是很好的.

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

提前致谢!

Aug*_*sto 9

这种方法有两个批评 ......请记住,我对你的背景知识几乎为零,这意味着我在这里建议的内容可能不适合你.

我只经历过像你提到的一个问题,它是一种症状,有对象之间太多的耦合,因为responsbilities人的方式来广泛.从那时起,我使用域驱动设计方法,我没有再遇到这个问题.

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

还有两个建议

如果你有时间,我建议你

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