测试比可测试代码大2-3倍

Ego*_*hin 30 language-agnostic unit-testing

测试是否比测试的实际代码更大是否正常?对于我正在测试的每行代码,我通常在单元测试中有2-3行.这最终导致花费大量时间只需键入测试(模拟,模拟和模拟更多).

节省时间在哪里?你有没有避免测试代码是否是微不足道的?我的大多数方法都不到10行,测试每一个方法需要花费很多时间,正如你所看到的那样,我开始质疑大部分测试的编写.

我不是在提倡不进行单元测试,我喜欢它.只想看看人们在编写测试之前考虑的因素.它们是有代价的(就时间而言是金钱),所以必须以某种方式评估这个成本.如果有的话,您如何估算单元测试所带来的节省?

Dro*_*per 16

您可能正在测试错误的东西 - 您不应该对代码中的每个方法进行不同的测试.

您可能有太多测试,因为您测试实现而不是功能 - 尝试测试完成测试的方式.

例如,如果您的客户有权获得每笔订单的折扣 - 使用正确的数据创建客户并为该客户创建订单,然后确保最终价格是正确的.这样你就可以测试业务逻辑,而不是内部如何完成.

另一个原因是,如果你需要初始化需要大量代码的困难对象尝试使用伪造/模拟,那么大型测试就是缺少隔离(也就是模拟).

最后,如果你有复杂的测试,它可能是一种气味 - 如果你需要编写大量代码来测试一个简单的功能,它可能意味着你的代码紧密耦合,你的API不够清晰.

  • @Bozho无论你怎么称呼它 - 你应该测试要求而不是实现.如果你测试实现,你将会得到非常脆弱的测试,即使最终结果是相同的,你也会在更改代码时中断测试. (6认同)

Mar*_*ann 6

单元测试代码应遵循与生产代码相同的最佳实践.如果你有那么多的单元测试代码,它就会有违反DRY原则的气味.

重构单元测试以使用测试实用程序方法应有助于减少整体单元测试占用空间.