测试比实际被测试的代码大得多,这正常吗?对于我测试的每一行代码,我通常在单元测试中有2-3行代码。这最终导致花费大量的时间来输入测试( mock,mock和mock more)。
节省的时间在哪里?你有没有避免过对琐碎的代码进行测试?我的大多数方法的长度都不到10行,测试每个方法都需要花费大量的时间,以至于,正如您所看到的,我从一开始就开始质疑大多数测试的编写。
我不是在提倡不进行单元测试,我喜欢它。我只是想看看在写测试之前人们会考虑什么因素。它们是有成本的(在时间方面,因此在金钱方面),所以这个成本必须以某种方式进行评估。你如何估计你的单元测试所节省的费用?
发布于 2010-04-06 15:16:09
你可能在测试错误的东西--你不应该对你代码中的每个方法都有不同的测试。
你可能有太多的测试,因为你测试的是实现,而不是功能--试着测试事情是如何完成的,测试完成了什么。
例如,如果您有一个客户有权从每个订单中获得折扣-使用正确的数据创建一个客户,并为该客户创建一个订单,然后确保最终价格正确。这样,您实际测试的是业务逻辑,而不是内部是如何完成的。
大型测试的另一个原因是缺乏隔离(也称为mocking),如果您需要初始化需要大量代码的困难对象,请尝试使用fakes/mocks。
最后,如果你有复杂的测试,可能会有异味--如果你需要写很多代码来测试一个简单的功能,这可能意味着你的代码紧密耦合,你的API不够清晰。
发布于 2010-04-06 15:20:48
单元测试代码应该遵循与生产代码相同的最佳实践。如果您有那么多单元测试代码,那么它就像是违反了DRY原则的。
重构您的单元测试以使用Test Utility Methods应该有助于减少整个单元测试的占用空间。
发布于 2010-04-06 19:22:24
过多的测试代码可能意味着被测试的实际代码不是为可测试性而设计的。谷歌开发者提供了一个很棒的guide on testability来解决这个问题。
设计糟糕的代码意味着大量的测试代码,而这些代码只有一个原因:使实际代码可测试。有了一个好的设计,测试可以更专注于什么是重要的。
https://stackoverflow.com/questions/2583187
复制相似问题