在我们的产品组中,我们的目标是单元测试的代码覆盖率达到50-70%,单元测试和测试自动化的覆盖率达到90%以上。对于编写每个单元的功能而言,通常花费在编写单元测试上的时间大约为1天,而这些功能需要3-4天的时间进行编码。但这可能因许多因素而异。
99%的代码覆盖率很棒。单元测试很棒。但是,仅单元测试的代码覆盖率就高达99%?我很难相信您可以从单元测试中获得如此多的覆盖。
对于您花3天为一个类编写测试,否则要花1天才能实现的情况。您没有详细说明为什么花这么长时间或共享任何代码。从推测的角度来看,我猜您不是在为您的班级编写真正的单元测试,而是在编写自动化测试。实际上,这没有什么不对-只要您能识别两种不同类型的测试之间的差异即可。
但是您说过,为期三天的测试写作只适用于一个班级。也许该类本身不是为单元测试而设计的。该类是否实现UI?联网?文件I / O?如果是这样,那么与与运行时交互的业务逻辑相比,您可能最终编写了更多的代码来测试Java运行时。
TDD让您思考接口和依赖关系的接口。可以将针对单个功能实现UI,网络和文件/ io的单个类更好地服务于多个类-一个用于网络,一个用于文件/ io,以及将UI分为模型查看器-控制器设计。然后,您可以使用依赖关系的简单模拟对象为每个对象实施适当的测试。当然,所有这些都花费更多的时间。因此,这种类型的设计可能需要3天的编码和1天的编写测试,而不是1天的编写代码和3天的编写测试。但是代码将具有更好的可维护性和可重用性。